对抗网络具有以下优点:永远不需要马尔可夫链,仅使用反向传播来获得梯度,在学习期间 不需要推理,并且可以容易地将各种因素和相互作用结合到模型中。
在无条件的生成模型中,模型无法控制正在生成的数据的模式。但是,通过将附加信息作为条件条件化(conditioning)模型,可以指导数据生成过程。这种条件化可以基于类标签,也可以基于图像修复数据的一部分。
有条件的对抗网络
如果生成器G和判别器D都以某些额外信息y为条件,则GAN可以被扩展到一个条件模型。y可以是任何类型的辅助信息,例如类标签或来自其他模态的数据。我们可以通过,将y作为附加输入层喂入判别器D和生成器G,来完成GAN的条件化。
在生成器G中,将先前的输入噪声pz(Z)和条件y合并为联合隐式表示。并且在如何组成该 隐藏表示方面,对抗训练框架有相当大的灵活性。
在判别器D中,x和y被表示为输入和判别函数(在这种情况下通过MLP再次体现)。
双人min-max游戏的目标函数是:
GAN的结构.png CGAN 结构网络结构图片来自:https://github.com/hwalsuklee/tensorflow-generative-model-collections
代码:
class Generator(nn.Module):
def __init__(self):
super(Generator, self).__init__()
self.label_emb = nn.Embedding(opt.n_classes, opt.n_classes)
def block(in_feat, out_feat, normalize=True):
layers = [nn.Linear(in_feat, out_feat)]
if normalize:
layers.append(nn.BatchNorm1d(out_feat, 0.8))
layers.append(nn.LeakyReLU(0.2, inplace=True))
return layers
self.model = nn.Sequential(
*block(opt.latent_dim + opt.n_classes, 128, normalize=False),
*block(128, 256),
*block(256, 512),
*block(512, 1024),
nn.Linear(1024, int(np.prod(img_shape))),
nn.Tanh()
)
def forward(self, noise, labels):
# Concatenate label embedding and image to produce input
gen_input = torch.cat((self.label_emb(labels), noise), -1)
img = self.model(gen_input)
img = img.view(img.size(0), *img_shape)
return img
class Discriminator(nn.Module):
def __init__(self):
super(Discriminator, self).__init__()
self.label_embedding = nn.Embedding(opt.n_classes, opt.n_classes)
self.model = nn.Sequential(
nn.Linear(opt.n_classes + int(np.prod(img_shape)), 512),
nn.LeakyReLU(0.2, inplace=True),
nn.Linear(512, 512),
nn.Dropout(0.4),
nn.LeakyReLU(0.2, inplace=True),
nn.Linear(512, 512),
nn.Dropout(0.4),
nn.LeakyReLU(0.2, inplace=True),
nn.Linear(512, 1),
)
def forward(self, img, labels):
# Concatenate label embedding and image to produce input
d_in = torch.cat((img.view(img.size(0), -1), self.label_embedding(labels)), -1)
validity = self.model(d_in)
return validity
没有用Conv,latentdim代表噪声的维度,n_classes代表10。G的激活函数为tanh()。
G的前向函数返回image,size为(img.size(0), *img_shape)。
参考链接:
Conditional GAN 全文翻译
Conditional Generative Adversarial Nets论文笔记
Conditional GAN原理分析与代码解读 - 科技猛兽的文章 - 知乎
网友评论