同学,理解和优化GAN看一下!
自从Ian Goodfellow首次引入架构以来,围绕生成的敌对网络(GAN)的大肆的炒作就一直在不断增长,许多进步和应用日益变得越来越引人入胜。但对于任何想要开始使用GAN的人来说,弄清楚从哪里开始入手可能还是个大问题。不要惊慌,这篇文章将会为你指出明确的道路。
与许多事情一样,充分理解一个概念的最好方法就是触及根源。抓住第一原则。这篇文章将以Keras的最纯粹的形式介绍该算法的简单实现。让我们开始吧。
在GAN的基础设置中,有两个模型,即发生器和鉴别器,其中发生器不断与鉴别器竞争,鉴别器是一个正在学习区分模型分布(例如生成的假图像)和数据的对手分布(例如真实图像)。
这个概念被著名的伪造者与警察场景可视化,其中生成模型被认为是伪造者产生假现金和鉴别者模型作为试图检测假现金的警察。这个想法是,由于彼此之间不断的竞争,造假者和警察都相互改善了角色,但最终造假者实现了生产虚假现金的阶段,这与真实现金没有区别。现在让我们把它放到代码中。
本文提供的示例脚本用于生成伪造的脸部图像。图1显示了我们试图用算法实现的最终结果。
构建生成器模型
因此,发电机模型应该会吸收一些噪音并输出令人满意的外观图像。在这里,我们使用Keras Sequential模型以及密集和批量标准化图层。使用的激活功能是Leaky Relu。请参阅下面的代码片段。
生成器模型可以分成几个区块。一个块由密集层 - >激活 - >批量标准化组成。添加了三个这样的块,最后一个块将像素转换为我们期望的图像的期望形状作为输出。模型的输入将是形状(100,)的噪声矢量,并在最后返回模型。注意随着模型的进展,每个密层中的节点是如何增加的。
建立鉴别器模型
鉴别器接收图像的输入,将其压平,并通过两个密集 - >激活块,最终输出一个在1和0之间的标量。输出1应表示输入图像是实数,否则为0。就那么简单。请参阅下面的代码。
注意:
你可以稍后修改这些模型,以获得更多的块、更多的批量标准层,不同的激活等。按照这个例子,这些模型足以理解GAN背后的概念。
寻找损失和训练
我们计算三个损失,在这个例子中全部使用二元交叉熵来训练这两个模型。
首先是鉴别器。如下面的代码所示,它训练了两种方式。首先为真实图像输出1(数组'img'),然后为生成的图像输出0(数组'gen_img')。随着训练的进展,辨别器在此任务中得到改进。但是我们的最终目标是在两种输入类型的鉴别器输出0.5的理论点上实现的(即如果是假的或真实的,则不确定)。
接下来是训练发生器,这是棘手的一点。要做到这一点,我们首先制定一个给定发电机输出的鉴别器组合模型。理想情况下,我们希望这是1,这意味着鉴别器将假造图像识别为真实图像。因此,我们将组合模型的输出与1进行训练。请参阅下面的代码。
这几乎是代码的要点,只是简单理解GAN的运作。
完整的代码可以在(https://github.com/miranthajayatilake/GANwKeras )上找到。你可以参考所有用于导入RGB图像的附加代码,初始化模型并将结果记录在代码中。另请注意,在训练期间,为了能够在CPU上运行,将小批量设置为Hi32映像。
此外,本例中使用的真实图像是来自CelebA数据集的5000张图像。这是一个开源数据集(https://www.floydhub.com/mirantha/datasets/celeba)。
有很多方法可以优化代码以获得更好的结果,也可以了解算法的不同组件如何影响结果的效率。在调整优化程序、激活程序、归一化程序、损失计算程序、超参数等不同组件的同时观察结果是增强对算法理解的最佳方法。这儿选择的是改变优化器。
因此,训练5000批次的32个批次,使用三种优化算法进行了测试。使用Keras这个过程就像导入和替换优化器函数的名称一样简单。Keras内置的所有优化器都可以在这里找到。
此外,在每个实例中绘制损失,以理解模型的行为。
1.使用SGD(随机梯度下降优化器)。输出和损耗变化分别如图2和3所示。
评论 - 虽然收敛是嘈杂的,但我们可以在这里看到,发生器的损耗在历元时期是递减的,这意味着鉴别器倾向于将假图像检测为真实。
2.使用RMSProp优化器。输出和损耗变化分别如图4和5所示。
损失:
评论 - 在这里,我们也看到发电机损耗在减少,这是一件好事。令人惊讶的是,真实图像上的鉴别器损失增加,这非常有趣。
3.使用Adam优化器。输出和损耗变化分别如图6和图7所示。
评论 - Adam优化器产生迄今为止最好的结果。请注意,在假图像上的鉴别器损失如何保留较大的值,这意味着鉴别器倾向于将假图像当成真实的来检测。
希望这篇文章能够从实践的角度对GAN的内部工作进行基本的了解,以了解如何改进基本模型。开源社区中的GAN在不同的应用程序中有许多实现,并且对首要原则有充分的理解将帮助你深入了解这些改进。此外,GAN在深度学习方面相对较新,有许多研究途径可供任何感兴趣的人开放。
所以,综上所述,你探索的可能性是巨大的!