我使用了来自(http://vision.ucsd.edu/~leekc/ExtYaleDatabase/ExtYaleB.html)的数据集,并想用 Conditional gan 生成人脸图像,我引用了来自(https://github.com/的网络架构GANs-in-Action/gans-in-action/blob/master/chapter-8/ Chapter_8_CGAN.ipynb )和(https://github.com/mvedang/Conditional-GAN-CIFAR-10)网络架构,但不管我训练了多少次,得到的图像仍然是噪声。
即使我调整了 Discriminator 和 Generator 的参数如层、神经元等,生成的结果仍然是噪声。
你能帮我纠正我构建的生成器和鉴别器模型吗?代码和结果链接:https ://colab.research.google.com/drive/14ul6BeXpVnlO3TVmfvSiR0kkYUuWfvn-?usp=sharing
发电机:
def build_cgan_generator(z_dim):
z_input = Input(shape=(z_dim,))
label_input = Input(shape=(1,),dtype='int32')
label_embedding = Embedding(classes,output_dim=z_dim,input_length=1)(label_input)
label_embedding = Flatten()(label_embedding)
join_represent = Multiply()([z_input,label_embedding])
x = Dense(4*4*256)(join_represent)
x = Reshape((4,4,256))(x)#4*4*256
x = Conv2DTranspose(64,kernel_size=3,padding='same',strides=2)(x)#8*8*64
#x = BatchNormalization(momentum=0.8)(x)
x = LeakyReLU(0.01)(x)
x = Conv2DTranspose(128,kernel_size=3,padding='same',strides=2)(x)#16*16*128
#x = BatchNormalization(momentum=0.8)(x)
x = LeakyReLU(0.01)(x)
x = Conv2DTranspose(64,kernel_size=3,padding='same',strides=2)(x)#32*32*64
#x = BatchNormalization(momentum=0.8)(x)
x = LeakyReLU(0.01)(x)
x = Conv2DTranspose(32,kernel_size=3,padding='same',strides=2)(x)#64*64*32
#x = BatchNormalization(momentum=0.8)(x)
x = LeakyReLU(0.01)(x)
x = Conv2DTranspose(3,kernel_size=4,padding='same',strides=2)(x)#128*128*3
output = keras.layers.Activation('tanh')(x)
model = keras.Model([z_input,label_input],output)
tf.keras.utils.plot_model(model,to_file='generator.png',show_shapes=True)
return model
鉴别器:
def build_cgan_discriminator(img_shape):
img_input = Input(shape=img_shape)
label_input = Input(shape=(1,))
label_embedding = Embedding(classes,output_dim=np.prod((img_shape[0],img_shape[1],1)),input_length=1)(label_input)
label_embedding = Flatten()(label_embedding)
label_embedding = Reshape((img_shape[0],img_shape[1],1))(label_embedding)
concatenated = Concatenate(axis=-1)([img_input, label_embedding])
x=layers.Conv2D(64,kernel_size=3,strides=2,padding='same')(concatenated)
x=LeakyReLU(0.01)(x)
x=layers.Conv2D(64,kernel_size=3,strides=2,padding='same')(x)
#x = BatchNormalization(momentum=0.8)(x)
x=LeakyReLU(0.01)(x)
x=layers.Conv2D(128,kernel_size=3,strides=2,padding='same')(x)
#x = BatchNormalization(momentum=0.8)(x)
x=LeakyReLU(0.01)(x)
x=layers.Conv2D(64,kernel_size=3,strides=2,padding='same')(x)
#x = BatchNormalization(momentum=0.8)(x)
x=LeakyReLU(0.01)(x)
x=Flatten()(x)
x=layers.Dropout(0.4)(x)
outputs = layers.Dense(1,activation='sigmoid',name='Output')(x)
model = keras.Model([img_input,label_input],outputs)
tf.keras.utils.plot_model(model,to_file='discriminator.png',show_shapes=True)
return model