网络结构
- 相同的是ACGAN和CGAN在生成器输入时候,噪音z都拼接了采集的labels。
- 不同的是,ACGAN在判别器输入时,真假数据集都没有拼接labels,labels只是用来在辅助分类器中作为target_labels。而CGAN的判别器输入,真假数据集都拼接了labels。
- 网络结构上,生成网络和鉴别网络的网络层不再是CGAN的全连接,而是ACGAN的深层卷积网络(这是在DCGAN开始引入的改变),卷积能够更好的提取图片的特征值,所有ACGAN生成的图片边缘更具有连续性,感觉更真实。
CGAN的代码:
for epoch in range(opt.n_epochs):
for i, (imgs, labels) in enumerate(dataloader):
batch_size = imgs.shape[0]
valid = Variable(FloatTensor(batch_size, 1).fill_(1.0), requires_grad=False)
fake = Variable(FloatTensor(batch_size, 1).fill_(0.0), requires_grad=False)
real_imgs = Variable(imgs.type(FloatTensor))
labels = Variable(labels.type(LongTensor))
optimizer_G.zero_grad()
z = Variable(FloatTensor(np.random.normal(0, 1, (batch_size, opt.latent_dim))