DCGAN的论文地址[https://arxiv.org/pdf/1511.06434.pdf]。DCGAN是GAN的一个变体,DCGAN就是将CNN和原始的GAN结合到一起,生成网络和鉴别网络都运用到了深度卷积神经网络。DCGAN提高了基础GAN的稳定性和生成结果质量。
DCGAN主要是在网络架构上改进了原始的GAN,DCGAN的生成器与判别器都利用CNN架构替换了原始GAN的全连接网络,主要改进之处有如下几个方面:
(1)DCGAN的生成器和判别器都舍弃了CNN的池化层,判别器保留CNN的整体架构,生成器则是将卷积层替换成了反卷积层。
(2)在判别器和生成器中使用了BatchNormalization(BN)层,这里有助于处理初始化不良导致的训练问题,加速模型训练提升训练的稳定性。要注意,在生成器的输出层和判别器的输入层不使用BN层。
(3)在生成器中除输出层使用Tanh()激活函数,其余层全部使用Relu激活函数,在判别器中,除输出层外所有层都使用LeakyRelu激活函数,防止梯度稀疏。
DCGAN的网络设计如下:
(1)取消所有pooling层,G网络中使用转置卷积进行上采样,D网络中加入stride的卷积(为防止梯度稀疏)代替pooling
(2)去掉FC层(全连接),使网络变成全卷积网络
(3)G网络中使用Relu作为激活函数,最后一层用Tanh
(4)D网络中使用LeakyRelu激活函数
(5)在generator和discriminator上都使用batchnorm,解决初始化差的问题,帮助梯度传播到每一层,防止generator把所有的样本都收敛到同一点。直接将BN应用到所有层会导致样本震荡和模型不稳定,因此在生成器的输出层和判别器的输入层不使用BN层,可以防止这种现象。
(6)使用Adam优化器
(7)参数设置参考:LeakyRelu的斜率是0.2;Learing rate = 0.0002;batch size是128。
DCGAN的G生成器的网络结构如下:
代码实现如下:carpedm20/DCGAN-tensorflow: A tensorflow implementation of "Deep Convolutional Generative Adversarial Networks" (github.com)