生成式对抗网络 (GAN) |简介
生成对抗网络 (GAN) 由 Ian Goodfellow 于 2014 年首次提出。GAN 是一类功能强大的神经网络,用于无监督学习。GAN 可以创造任何东西,无论你提供给他们什么,因为它是 Learn-Generate-Improve。要首先了解 GAN,您必须对
卷积神经网络知之甚少。如果将图像馈送到 CNN,CNN 经过训练可以根据图像的标签对图像进行分类,它会逐个像素分析图像并通过 CNN 隐藏层中存在的节点,作为输出,它会告诉图像是关于什么的或它在图像中看到什么。例如:如果 CNN 经过训练对狗和猫进行分类,并且图像被提供给该 CNN,它可以判断该图像中是狗还是猫。因此,它也可以称为分类算法。GAN 有何不同?GAN 可以分为两部分,即 Generator 和 Discriminator。鉴别器–GANs 的这一部分可以被认为类似于 CNN 的作用。判别器是一个卷积神经网络,由许多隐藏层和一个输出层组成,这里的主要区别是 GAN 的输出层只能有两个输出,这与 CNN 不同,CNN 可以有相对于它训练的标签数量的输出。判别器的输出可以是 1 或 0,因为为此任务专门选择了激活函数,如果输出为 1,则提供的数据是真实的,如果输出为 0,则将其称为假数据。Discriminator 在真实数据上进行训练,因此它学会识别实际数据的外观以及数据应该将哪些特征归类为真实数据。 发电机–从名称本身,我们可以理解它是一种生成算法。Generator 是一个逆卷积神经网络,它的作用与 CNN 完全相反,因为在 CNN 中,实际图像作为输入给出,分类标签预期作为输出,但在 Generator 中,随机噪声(具有一些确切值的向量)作为该逆 CNN 的输入,实际图像预期作为输出。简单来说,它利用自己的想象力从一段数据中生成数据。 如上图所示,一个随机值向量作为 Inverse-CNN 的输入,在通过隐藏层和激活函数后,接收图像作为输出。Generator 和 Discriminator 一起工作:正如我们已经讨论过的,Discriminator 是在实际数据上训练的,以分类给定的数据是否真实,因此 Discriminator 的工作是分辨什么是真实的,什么是假的。现在生成器开始从随机输入生成数据,然后将生成的数据作为输入传递给判别器,现在判别器分析数据并检查它被归类为真实数的接近程度,如果生成的数据不包含足够的特征而被判别器归类为真实数,那么这些数据和与之相关的权重将使用反向传播发送回生成器, 这样它就可以重新调整与数据关联的权重并创建比前一个更好的新数据。此新生成的数据再次传递给 Discriminator 并继续。只要 Discriminator 每次数据都不断将生成的数据分类为假数据,这个过程就会不断重复被归类为假数据,并且随着每一次反向传播,数据的质量会越来越好,并且总有一天 Generator 变得如此准确,以至于很难区分真实数据和 Generator 生成的数据。 简单来说,Discriminator 是一个训练有素的人,他可以分辨什么是真的,什么是假的,而 Generator 正试图欺骗 Discriminator,让他相信生成的数据是真实的,每一次失败的尝试,Generator 都会学习和改进自己以产生更真实的数据。它也可以说是 Generator 和 Discriminator 之间的竞争。
生成器和鉴别器的示例代码:
1. 构建生成器
一个。What input to pass input to first layer of generator in initial stage :random_normal_dimensions这是一个超参数,用于定义您希望将向量中的多少个随机数输入生成器,作为生成图像的起点。
湾。接下来需要注意的一点是,这里我们使用了 “selu” 激活函数而不是 “relu”,因为 “relu” 在对数据进行分类时具有去除噪声的作用,可以防止负值抵消正值,但在 GAN 中,我们不想删除数据。
- Python3 语言
2. 构建判别器:
- Python3 语言
3. 编译判别器:
这里我们用 binary_crossentropy loss 和 rmsprop 优化器编译鉴别器。
将判别器设置为不训练其权重(设置其 “trainable” 字段)。
- Python3 语言
4. 构建和编译 GAN 模型 :
为 GAN 构建顺序模型,传递包含生成器和判别器的列表。
使用二进制交叉熵损失和 rmsprop 优化器编译模型。
- Python3 语言
5. 训练 GAN:
第 1 阶段
real_batch_size:获取输入批次的批次大小(它是张量的第 0 维)
noise:使用 tf.random.normal 生成噪声。形状为批量大小 x random_normal_dimension
个假图像:使用您刚刚创建的生成器。传入噪声并产生假图像。
mixed_images:将假图与真图拼接起来。
将轴设置为 0。
discriminator_labels:设置为 0。用于真实图像和 1.用于虚假图像。
将判别器设置为 trainable。
使用判别器的 train_on_batch() 方法对混合图像和判别器标签进行训练。
第 2 阶段
杂色:生成维度为 batch_size x 的随机法线值
random_normal_dimensions Use real_batch_size。
Generator_labels:设置为 1。将假图像标记为真实
生成器将生成标记为真实图像的假图像,并试图欺骗判别器。
将判别器设置为 NOT be trainable。
在噪声和生成器标签上训练 GAN。