0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于网络本身即可以生成数据能力的神经网络结构了解嘛?

新机器视觉 来源:新机器视觉 作者:George Seif 2022-05-24 16:08 次阅读

生成对抗网络(GANs,https://en.wikipedia.org/wiki/Generative_adversarial_network)是一类具有基于网络本身即可以生成数据能力的神经网络结构。由于GANs的强大能力,在深度学习领域里对它们的研究是一个非常热门的话题。在过去很短的几年里,它们已经从产生模糊数字成长到创造如真实人像般逼真的图像。

d70d1f78-da6f-11ec-ba43-dac502259ad0.pngd738fd28-da6f-11ec-ba43-dac502259ad0.jpg

1 GAN的工作方式


GANs属于生成模型的一类(https://en.wikipedia.org/wiki/Generative_model)。这意味着它们能够产生,或者说是生成完全新的“有效”数据。有效数据是指网络的输出结果应该是我们认为可以接受的目标。

举例说明,举一个我们希望为训练一个图像分类网络生成一些新图像的例子。当然对于这样的应用来说,我们希望训练图像越真实越好,可能在风格上与其他图像分类训练数据非常相似。

下面的图片展示的例子是GANs已经生成的一系列图片。它们看起来非常真实!如果没人告诉我们它们是计算机生成的,我们真可能认为它们是人工搜集的。

d759a5dc-da6f-11ec-ba43-dac502259ad0.jpg

渐进式GAN生成的图像示例(图源:https://arxiv.org/pdf/1710.10196.pdf)

为了做到这些,GANs是以两个独立的对抗网络组成:生成器和判别器。当仅将嘈杂的图像阵列作为输入时,会对生成器进行训练以创建逼真的图像。别器经过训练可以对图像是否真实进行分类。

GANs真正的能力来源于它们遵循的对抗训练模式。生成器的权重是基于判别器的损失所学习到的。因此,生成器被它生成的图像所推动着进行训练,很难知道生成的图像是真的还是假的。同时,生成的图像看起来越来越真实,判别器在分辨图像真实与否的能力变得越来越强,无论图像用肉眼看起来多么的相似。

从技术的角度来看,判别器的损失即是分类图像是真是假的错误值;我们正在测量它区分真假图像的能力。生成器的损失将取决于它在用假图像“愚弄”判别器的能力,即判别器仅对假图像的分类错误,因为生成器希望该值越高越好。

因此,GANs建立了一种反馈回路,其中生成器帮助训练判别器,而判别器又帮助训练生成器。它们同时变得更强。下面的图表有助于说明这一点。

d78eb3bc-da6f-11ec-ba43-dac502259ad0.png

生成对抗网络的结构说明

2在PyTorch中训练GAN来生成数字


现在我们将通过一个例子来展示如何使用PyTorch建立和训练我们自己的GAN!MNIST数据集包含60000个训练数据,数据是像素尺寸28x28的1-9的黑白数字图片。这个数据集非常适合我们的用例,同时也是非常普遍的用于机器学习的概念验证以及一个非常完备的集合。

d7af8042-da6f-11ec-ba43-dac502259ad0.jpg

MNIST 数据部分集,图源:https://www.researchgate.net/figure/A-subset-of-the-MNIST-database-of-handwritten-digits_fig4_232650721

我们将从import开始,所需的仅仅是PyTorch中的东西。


												
import torch    from torch import nn, optim    from torch.autograd.variable import Variable
import torchvision    import torchvision.transforms as transforms

接下来,我们为训练数据准备DataLoader。请记住,我们想要的是为MNIST生成随机数字,即从0到9。因此,我也将需要为这10个数字建立标签

d7d65f1e-da6f-11ec-ba43-dac502259ad0.png

现在我们可以开始建立网络了,从下面的Discriminator(判别器)网络开始,回想一下,判别器网络是对图像真实与否进行分类——它是一个图像分类网络。因此,我们的输入是符合标准MNIST大小的图像:28x28像素。我们把这张图像展平成一个长度为784的。输出是一个单独的值,表示图像是否是实际的MNIST数字。

d7ef1df6-da6f-11ec-ba43-dac502259ad0.png

接下来到了生成器部分。生成器网络负责创建实际的图像——它可以从一个纯噪声的输入做到这一点!在这个例子中,我们要让生成器从一个长度为100的开始——注意:这只是纯随机噪声。从这个,我们的生成器将输出一个长度为784的,稍后我们可以将其重塑为标准MNIST的28x28像素。

d8125726-da6f-11ec-ba43-dac502259ad0.png

为了建立训练过程,我们将需要做以下工作:
  • 1 . 损失函数
  • 2 . 每个网络的优化器
  • 3 . 训练次数
  • 4 . batch数量
如果我们希望网络在GPU上执行,PyTorch要求我们必须明确地把模型移动到GPU上。这部分所有的代码如下所示。d8632ae8-da6f-11ec-ba43-dac502259ad0.png现在开始训练循环。PyTorch中的训练循环通常由一个遍历各个训练周期的外部循环和一个遍历batch数据的内部循环组成。训练GAN的关键是我们需要在一个循环中更新生成器和判别器。查看下面的代码来训练GAN和PyTorch这些步骤在代码下面有更详细的描述。d891088c-da6f-11ec-ba43-dac502259ad0.pngd8ca7144-da6f-11ec-ba43-dac502259ad0.png(1)我们首先为判别器准备 *real* 图像数据。输入的是一批真实的MNIST图像。输出全为1的,因为1表示图像是真实的。

(2)接下来,我们将为生成器准备输入量以便生成假图像。回想一下,我们的生成器网络采用长度为100的输入向量,这就是我们在这里所创建的向量。images.size(0)用于批处理大小。

(3)通过从步骤(2)中创建的随机噪声数据向量,我们可以绕过这个向量到生成器来生成假的图像数据。这将结合我们从步骤1的实际数据来训练判别器。请注意,这次我们的标签向量全为0,因为0代表假图像的类标签。

(4)通过假的和真的图像以及它们的标签,我们可以训练我们的判别器进行分类。总损失将是假图像的损失+真图像的损失。

(5)现在我们的判别器已经更新,我们可以用它来进行预测。这些预测的损失将通过生成器反向传播,这样生成器的权重将根据它欺骗判别器的程度进行具体更新

(5a)生成一些假图像进行预测

(5b)使用判别器对假图像进行分批次预测并保存输出。

(6)使用判别器的预测训练生成器。注意,我们使用全为1的 _real_labels_ 作为目标,因为我们的生成器的目标是创建看起来真实的图像并且预测为1!因此,生成器的损失为0将意味着判别器预测全1.

瞧,这就是我们训练GAN生成MNIST图像的全部代码!只需要安装PyTorch即可运行。下面的gif就是经过超过40个训练周期生成的图像。

d8e2dd60-da6f-11ec-ba43-dac502259ad0.gif

d94503b4-da6f-11ec-ba43-dac502259ad0.png

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 神经网络
    +关注

    关注

    42

    文章

    4772

    浏览量

    100803
  • 图像
    +关注

    关注

    2

    文章

    1085

    浏览量

    40478
  • 生成器
    +关注

    关注

    7

    文章

    315

    浏览量

    21025

原文标题:你真的了解深度学习生成对抗网络(GAN)吗?

文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    神经网络三层结构的作用是什么

    神经网络是一种受人脑启发的计算模型,能够模拟人脑神经元网络的工作原理。神经网络由多个层次的神经元组成,每个神经
    的头像 发表于 07-11 11:03 902次阅读

    递归神经网络和循环神经网络的模型结构

    递归神经网络是一种旨在处理分层结构神经网络,使其特别适合涉及树状或嵌套数据的任务。这些网络明确地模拟了层次
    的头像 发表于 07-10 17:21 672次阅读
    递归<b class='flag-5'>神经网络</b>和循环<b class='flag-5'>神经网络</b>的模型<b class='flag-5'>结构</b>

    递归神经网络结构形式主要分为

    递归神经网络(Recurrent Neural Networks,简称RNN)是一种具有时间序列处理能力神经网络,其结构形式多样,可以根据
    的头像 发表于 07-05 09:32 555次阅读

    递归神经网络与循环神经网络一样吗

    递归神经网络(Recursive Neural Network,RvNN)和循环神经网络(Recurrent Neural Network,RNN)是两种不同类型的神经网络结构,它们在处理序列
    的头像 发表于 07-05 09:28 888次阅读

    人工神经网络模型的分类有哪些

    详细介绍人工神经网络的分类,包括前馈神经网络、卷积神经网络、循环神经网络、深度神经网络生成对抗
    的头像 发表于 07-05 09:13 1230次阅读

    循环神经网络和卷积神经网络的区别

    。它们在处理不同类型的数据和解决不同问题时具有各自的优势和特点。本文将从多个方面比较循环神经网络和卷积神经网络的区别。 基本概念 循环神经网络是一种具有循环连接的
    的头像 发表于 07-04 14:24 1309次阅读

    循环神经网络和递归神经网络的区别

    循环神经网络(Recurrent Neural Network,简称RNN)和递归神经网络(Recursive Neural Network,简称RvNN)是深度学习中两种重要的神经网络结构。它们在
    的头像 发表于 07-04 14:19 930次阅读

    深度神经网络与基本神经网络的区别

    在探讨深度神经网络(Deep Neural Networks, DNNs)与基本神经网络(通常指传统神经网络或前向神经网络)的区别时,我们需要从多个维度进行深入分析。这些维度包括
    的头像 发表于 07-04 13:20 890次阅读

    bp神经网络算法过程包括

    的算法过程,包括网络结构、激活函数、训练过程、反向传播算法、权重更新策略等。 网络结构 BP神经网络由输入层、隐藏层和输出层组成,每层包含若干神经元。输入层的
    的头像 发表于 07-04 09:45 471次阅读

    卷积神经网络与循环神经网络的区别

    网络结构,分别适用于不同的应用场景。本文将从基本概念、结构组成、工作原理及应用领域等方面对这两种神经网络进行深入解读。
    的头像 发表于 07-03 16:12 3337次阅读

    BP神经网络算法的基本流程包括

    、自然语言处理等。本文将详细介绍BP神经网络算法的基本流程,包括网络结构、激活函数、前向传播、反向传播、权重更新和训练过程等。 网络结构 BP神经网络由输入层、隐藏层和输出层组成。输入
    的头像 发表于 07-03 09:52 507次阅读

    神经网络算法的结构有哪些类型

    : 多层感知器(MLP) 多层感知器是最基本和最简单的神经网络结构,它由输入层、隐藏层和输出层组成。每个神经元都通过权重和偏置与前一层的神经元相连,并使用激活函数进行非线性转换。MLP可以
    的头像 发表于 07-03 09:50 456次阅读

    卷积神经网络和bp神经网络的区别

    不同的神经网络模型,它们在结构、原理、应用等方面都存在一定的差异。本文将从多个方面对这两种神经网络进行详细的比较和分析。 引言 神经网络是一种模拟人脑
    的头像 发表于 07-02 14:24 4100次阅读

    神经网络结构类型和应用实例

    神经网络模型,作为深度学习领域的核心组成部分,近年来在图像识别、自然语言处理、语音识别等多个领域取得了显著进展。本文旨在深入解读神经网络的基本原理、结构类型、训练过程以及应用实例,为初学者提供一份详尽的入门指南。
    的头像 发表于 07-02 11:33 449次阅读

    神经网络架构有哪些

    神经网络架构是机器学习领域中的核心组成部分,它们模仿了生物神经网络的运作方式,通过复杂的网络结构实现信息的处理、存储和传递。随着深度学习技术的不断发展,各种神经网络架构被提出并广泛应用
    的头像 发表于 07-01 14:16 718次阅读