Conditional Generative Adversarial Nets
前言
GAN虽然厉害,但有个问题,其生成模型生成的样本完全是随机的。也就是完全取决于输入的噪声z,根本无法预测会生成数字1还是数字2。因此有人提出了条件GAN,其思想也是很简单,就是想要生成哪个数字,你输入的时候告诉我你想要的标签即可。为了达到这个目标,在训练的时候,就要加上标签。也就是G想伪造数字1,就要在原本的z向量后面加十维的one hot向量。在D那里也是,要判别是什么,也要在尾部加上十维的one hot向量。
直观上很难解释这是为什么,但多层感知机,乃至CNN,就是有那么强大的力量,你传什么,我训练出来的结果我都不知道是为什么,就是对的!这也是神经网络被称为黑箱的原因。
介绍
具体的论文介绍等日后有再看论文再来填坑,其实真的就只是比GAN多了一个输入,即真实标签y。
如图所示,原本的GAN是没有绿色部分的,条件GAN在生成器和判别器的训练过程中都添加了绿色的y标签,即数字的one hot。公式变成下面这个
[Math Processing Error]minGmaxDEx∼pdata(x)[logD(x|y)]+Ez∼pz(z)[log(1−D(G(z|y)))]
仅仅只是多了”[Math Processing Error]|y”,差别不大。
我自己根据上一篇论文的代码稍加改造实现了一个弱智的条件GAN,但效果表现还可以。G和D基于2层感知机。
算法效果
一开始的渣渣生成器,生成下面这张图,的确就是瞎生成。

再过几轮训练,生成器被判别器调教乖了,想生成啥就生成啥,问你怕不怕。

我们来看看生成器被调教的过程。

代码
import tensorflow as

条件GAN(CGAN)通过附加标签信息解决GAN生成样本的随机性问题,使得生成器能根据输入标签创建特定类型的数据。训练中,G和D都使用标签向量,增加模型的指导性。本文介绍了CGAN的基本思想,展示了从简单的感知机实现到生成器逐步改进的学习过程。

1634

被折叠的 条评论
为什么被折叠?



