「埃尔法哥哥」快速看懂如何使用GAN生成“真实”的人脸( 三 )


x = LeakyReLU()(x)
x = Conv2D(512, 5, padding='same')(x)
x = LeakyReLU()(x)
x = Conv2D(CHANNELS, 7, activation='tanh', padding='same')(x)
generator = Model(gen_input, x)
return generator
「埃尔法哥哥」快速看懂如何使用GAN生成“真实”的人脸
本文插图
接下来 , 创建一个判别器:
判别器网络由与生成器相同的卷积层组成 。 对于网络的每一层 , 我们将执行卷积 , 然后将执行批归一化以使网络更快 , 更准确 , 最后 , 我们将执行Leaky ReLu 。
def create_discriminator():
disc_input = Input(shape=(HEIGHT, WIDTH, CHANNELS))
x = Conv2D(256, 3)(disc_input)
x = LeakyReLU()(x)
x = Conv2D(256, 4, strides=2)(x)
x = LeakyReLU()(x)
x = Conv2D(256, 4, strides=2)(x)
x = LeakyReLU()(x)
x = Conv2D(256, 4, strides=2)(x)
x = LeakyReLU()(x)
x = Conv2D(256, 4, strides=2)(x)
x = LeakyReLU()(x)
x = Flatten()(x)
x = Dropout(0.4)(x)
x = Dense(1, activation='sigmoid')(x)
discriminator = Model(disc_input, x)
optimizer = RMSprop(
lr=.0001,
clipvalue=http://news.hoteastday.com/a/1.0,
decay=1e-8
)
discriminator.compile(
optimizer=optimizer,
loss='binary_crossentropy'
)
return discriminator
「埃尔法哥哥」快速看懂如何使用GAN生成“真实”的人脸
本文插图
定义GAN模型:
接下来 , 可以定义GAN模型 , 将生成器模型和判别器模型组合为一个更大的模型 。 此更大的模型将用于使用判别器模型计算的输出和误差来训练生成器中的模型权重 。 区分模型是单独训练的 , 因此 , 在此较大的GAN模型中 , 模型权重被标记为不可训练 , 以确保仅更新生成器模型的权重 。 这种对判别器权重可训练性的改变只在训练组合GAN模型时发生 , 而在单独训练判别器时不发生 。
这个更大的GAN模型将潜在空间中的一个点作为输入 , 使用生成器模型生成图像 , 将其作为输入馈送到判别器模型 , 然后输出或分类为真实或伪造 。
由于判别器的输出是S形的 , 因此我们使用二进制交叉熵来表示损失 。 在这种情况下 , 与Adam相比 , RMSProp作为优化程序可生成更逼真的伪图像 。 学习率是0.0001 。 在随后的训练中 , 轻型衰减和修剪值稳定了学习 。 如果要调整学习率 , 则必须调整衰减 。
GAN尝试复制概率分布 。 因此 , 我们应该使用损失函数来反映GAN生成的数据的分布与实际数据的分布之间的距离 。
generator = create_generator()
discriminator = create_discriminator()
discriminator.trainable = False
gan_input = Input(shape=(LATENT_DIM, ))
gan_output = discriminator(generator(gan_input))
gan = Model(gan_input, gan_output)
optimizer = RMSprop(lr=.0001, clipvalue=http://news.hoteastday.com/a/1.0, decay=1e-8)
gan.compile(optimizer=optimizer, loss='binary_crossentropy')
我们不仅要定义一个损失函数 , 还需要定义三个:生成器的损失 , 使用真是图像时的判别器损失和使用假图像时的判别器损失 。 伪造的图像损失与真实的图像损失之和就是总的判别器损失 。
训练GAN模型:
训练是最困难的部分 , 并且由于GAN包含两个单独训练的网络 , 因此它的训练算法必须解决两个复杂问题:
GAN必须兼顾两种不同的训练(生成器和判别器) 。