CGAN原理及tensorflow代码
2019-06-08 本文已影响0人
求索_700e
转自:https://blog.csdn.net/qq_26499769/article/details/83831640
1.首先说明一下CGAN的意义
GAN的原始模型有很多可以改进的缺点,首当其中就是“模型不可控”。从上面对GAN的介绍能够看出,模型以一个随机噪声为输入。显然,我们很难对输出的结构进行控制。例如,使用纯粹的GAN,我们可以训练出一个生成器:输入随机噪声,产生一张写着0-9某一个数字的图片。然而,在现实应用中,我们往往想要生成“指定”的一张图片。
2.直观解决方案
在GAN上增加一个额外的输入。也就是说,以前我们的生成模型是,现在,我们的生成模型是在一个条件c的控制下产生。而这个c就是我们用来控制模型的额外的输入。
c可以是表示我们意图的一串编码,例如我们想要做0-9的手写数字生成,则c可以是一个10维的one-hot向量。则在训练过程中,我们将这些label加入到训练数据中,从而得到一个按照我们需求产生图片的生成器。
这就是Conditional Generative Adversarial Nets最基本的想法。这里要注意的是,这个c不但附加在了生成器上,同时也附加在了判别器上,相当于给了判别器一个额外的信息:现在这个图片是以条件c生成的?还是以条件c控制下的真正的图片?
3.训练目标
原文中有这样一张图,在其他博客中也常见到


CGAN代码如下:






生成效果如上图,为了方便理解,本文只用了最简单的神经网络,有时间会使用CNN重写该网络。