首页 理论教育 深度学习与深度合成:DCGAN探究

深度学习与深度合成:DCGAN探究

时间:2023-11-18 理论教育 版权反馈
【摘要】:DCGAN的全称是Deep Convolutional Generative Adversarial Networks,即深度卷积对抗生成网络。DCGAN基本采用卷积层替代了GAN中的全连接层,其中在生成器中采用带步长的卷积代替了上采样,从而提升了GAN训练时的稳定性和生成图像质量。DCGAN的网络结构如图7-9所示。图7-9DCGAN结构在Keras框架中的DCGAN构建生成器和判别器的代码如下,其他部分的代码和CGAN代码基本相同。

深度学习与深度合成:DCGAN探究

DCGAN的全称是Deep Convolutional Generative Adversarial Networks,即深度卷积对抗生成网络。它是由Alec Radford在ICLR 2016会议中提出的。前面介绍GAN在判别器和生成器上使用的网络结构都是全连接网络,这种结构相对于卷积神经网络并不适合图像处理,DCGAN的作者将卷积神经网络应用到GAN上,效果得到了明显的提升,后续提出的各种GAN变种一般也都是在DCGAN的基础上进行改进。

DCGAN基本采用卷积层替代了GAN中的全连接层,其中在生成器中采用带步长的卷积代替了上采样,从而提升了GAN训练时的稳定性和生成图像质量。DCGAN的网络结构如图7-9所示。

图7-9 DCGAN结构

在Keras框架中的DCGAN构建生成器和判别器的代码如下,其他部分的代码和CGAN代码基本相同。

def build_generator_model(self):

#构建生成器网络的函数

noise=Input(shape=self.config.generator_input_dim, name="gener-ator_input")

x=Dense(256∗7∗7,input_shape=self.config.generator_input_dim, name="dense1")(noise)

x=BatchNormalization(momentum=self.config.BatchNormalization_Momentum, name="bn1")(x)

x=Activation('relu',name="relu1")(x)

x=Reshape((7,7,256),name="reshape")(x)

x=Conv2DTranspose(128,kernel_size=3,strides=2,padding='same',name="deconv1")(x)

x=BatchNormalization(momentum=self.config.BatchNormalization_Momentum, name="bn2")(x)

x=Activation('relu',name="relu2")(x)

x=Conv2DTranspose(64,kernel_size=3,strides=2,padding='same',name="deconv2")(x)

x=BatchNormalization(momentum=self.config.BatchNormalization_Momentum, name="bn3")(x)

x=Activation('relu',name="relu3")(x)

x=Conv2DTranspose(32,kernel_size=3,padding='same',name="deconv3")(x)

x=BatchNormalization(momentum=self.config.BatchNormalization_Momentum, name="bn4")(x)

x=Activation('relu',name="relu4")(x)

x=Conv2DTranspose(self.config.discriminator_input_dim[2],kernel_size=3,padding='same',name="deconv4")(x)

x=Activation('tanh',name="generator_output")(x)

model=Model(noise, x)

model. summary()

return model(www.xing528.com)

def build_discriminator_model(self):

"""

#构造判别器模型的函数

#返回判别器模型discriminator_model

"""

image=Input(shape=self.config.discriminator_input_dim, name="discriminator_input")

x=Conv2D(64,kernel_size=3,strides=2,padding='same',name="conv1")(image)

x=LeakyReLU(self.config.LeakyReLU_alpha, name="leakyrelu1")(x)

x=Dropout(self.config.dropout_prob, name="dropout1")(x)

x=Conv2D(128,kernel_size=3,strides=2,padding='same',name="conv2")(x)x=LeakyReLU(self.config.LeakyReLU_alpha, name="leakyrelu2")(x)

x=Dropout(self.config.dropout_prob, name="dropout2")(x)

x=Conv2D(256,kernel_size=3,strides=2,padding='same',name="conv3")(x)

x=LeakyReLU(self.config.LeakyReLU_alpha, name="leakyrelu3")(x)

x=Dropout(self.config.dropout_prob, name="dropout3")(x)

x=Conv2D(5 12,kernel_size=3,strides=2,padding='same',name="conv4")(x)

x=LeakyReLU(self.config.LeakyReLU_alpha, name="leakyrelu4")(x)

x=Dropout(self.config.dropout_prob, name="dropout4")(x)

x=Flatten(name="flatten1")(x)

x=Dense(1,name="dense")(x)

x=Activation('sigmoid',name="discriminator_output")(x)

model=Model(image, x)

model. summary()

return model

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈