0

我使用了来自(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
4

0 回答 0