DCGAN实现手写体
构建生成器网络
和gan一样,设置图像维度为(28,28,1),生成器输入维度为(100,)
from tensorflow.keras.layers import Input
img_rows = 28
img_cols = 28
channels = 1
img_shape = (img_rows,img_cols,channels)
latent_dim = 100
generator_input = Input(shape=(latent_dim ,))
接着将输入转换成7×7大小128个通道的特征图feature map
from tensorflow.keras.layers import Dense,Reshape
x = Dense(128*7*7,activation="relu",)(generator_input)
x = Reshape((7,7,128))(x)
此处的DCGAN是和GAN最大的不同,这里的DCGAN使用了微步幅卷积或上采样进行图像放大。这里采用Keras的UpSampling2D层对输入进行上采样
from tensorflow.keras.layers import UpSampling2D
x = UpSampling2D()(x)
然后添加卷积层,设置filters为128,kernel_size 为 3,padding 为 same,使得输出维度和输入维度相同。这里的Keras 中使用 Conv2D 方法调用卷积层
from tensorflow.keras.layers import Conv2D
x = Conv2D(128, kernel_size=3, padding='same')(x)
添加 BatchNormalization 层和 Activation 层。将 ReLU 激活函数通过 Activation 层应用于输出
from tensorflow.keras.layers import BatchNormalization, Activation
x = BatchNormalization(momentum=0.8)(x)
x = Activation("relu")(x)
添加更多的层
x = UpSampling2D()(x)
x = Conv2D(64, 3, padding='same')(x)
x = BatchNormalization(momentum=0.8)(x)
x = Activation("relu")(x)
构建输出层,生成一个大小为 28×28 的单通道特征图,使用 Tanh 激活函数
x = Conv2D