生成对抗网络GAN系列(二)--- Conditional Generative Adversarial Nets(cGAN 条件GAN)--- 文末附代码

生成对抗网络GAN系列(二)

--- Conditional Generative Adversarial Nets(cGAN 条件GAN)

---文末附代码

Conditional Generative Adversarial Nets  论文链接:https://arxiv.org/abs/1411.1784

 

1.简介

Conditional GAN 是在原始GAN之后一个比较早的改进版,虽然改动确实很简单,但是idea还是非常具有启发性。

2.核心思想

原始GAN的生成器G学到了数据的分布,生成出来的图片其实是随机的,也就是说这个G的生成过程处于一种没有指导的状态,虽然生成的图片,比如mnist数据集来说,生成的的确是数字,但是却没有具体的说是什么数字。 cGAN相当于在原始GAN的基础上加上一个条件:condition,以此来指导G的生成过程。

3.具体实现

在G和D的输入端都添加条件,则D就相当于多加了一部分信息,从而进行更为具体的判别;G的输入多了一个条件之后,生成的数据也就有了一个具体的方向。

损失函数变为:

生成对抗网络GAN系列(二)--- Conditional Generative Adversarial Nets(cGAN 条件GAN)--- 文末附代码

用图像解释来说,改动其实很简单:

生成对抗网络GAN系列(二)--- Conditional Generative Adversarial Nets(cGAN 条件GAN)--- 文末附代码

其中的y就是条件,跟数据x噪声z同时分别输入进D和G网络中。仅仅做了这个改动而已。

4.结果

生成对抗网络GAN系列(二)--- Conditional Generative Adversarial Nets(cGAN 条件GAN)--- 文末附代码

可以看出,数字是有序排列的,这是因为我们的y设置为一个包含数字0—9的向量

比起普通的原始GAN(下图)来说:生成的虽然是数字,但是是无序的随机数字

生成对抗网络GAN系列(二)--- Conditional Generative Adversarial Nets(cGAN 条件GAN)--- 文末附代码

很明显,cGAN受到条件y的影响能够生成指定的数字,这就是条件发挥了作用

 

5.代码

pytorch 版本:https://github.com/TeeyoHuang/conditional-GAN