条件生成对抗网络(Conditional GANs)

文章目录
  1. 1. 背景
  2. 2. 基本框架
  3. 3. 实验
  4. 4. 代码实现

背景

在原始的生成对抗网络论文中,作者指出了一个可能的拓展:

A conditional generative model $p(x|c)$ can be obtained by adding $c$ as input to both $G$ and $D$

于是同年11月,Mirza等人便提出了Conditional Generative Adversarial Networks,这是一种带条件约束的生成模型。

它在生成器 $G$ 和 判别器 $D$ 中均引入了条件变量 $y$,这里 $y$ 可以是任何的辅助信息(比如说,类别标签、其它模态的数据等等)。使用这个额外的条件变量,对生成器数据的生成具有指导作用。因此,该项工作可以看成是把无监督的GAN变成有监督模型的一种改进。

基本框架

Conditional GANs的基本框架

Conditional GANs的基本框架非常地简单,只需在原始GAN的生成器和判别器的输入中,加入额外的条件信息即可。

显然地,目标函数改为:

实验

在论文中,作者做了两个实验,一个是单模态的MNIST手写数字生成,另一个是基于多模态的图像自动标注。

mnist手写数字生成(论文原图)

MNIST数据集的实验中,生成器 $G$ 的输入分为两部分:

  • 噪声 $z$:100维 服从均匀分布的向量
  • 条件 $y$:类别标签的one hot编码

然后将噪声 $z$ 和 标签 $y$ 分别映射到隐层(2001000units),在映射到第二层前,连接所有1200units。最终,用一个sigmoid层输出784维(28*28)的单通道图像。

判别器 $D$ 把输入图像 $x$ 映射到一个有240units5piecesmaxout layer,把标签 $y$ 映射到有50units5piecesmaxout layer。同时,把所有隐层连接成为一个有240units4piecesmaxout layer。最后送入sigmoid层,该层的输出即为在条件 $y$ 下,输入图像 $x$ 为真实样本的概率。

代码实现

Github地址:(orzyt/Generative-Adversarial-Nets/conditional-gan)

具体实现细节与论文有所不同,网络架构使用的是DCGAN,效果会比论文中的好(毕竟DCGAN是在CGAN之后才提出的…

让我们看下代码跑出来的效果

mnist手写数字生成(实测效果)

分享到 评论