gan的损失功能



我正在尝试构建一个简单的mnist gan,而不需要说,它行不通。我已经搜索了很多,并修复了我的大部分代码。虽然我真的不明白损失功能如何工作。

这就是我所做的:

loss_d = -tf.reduce_mean(tf.log(discriminator(real_data))) # maximise
loss_g = -tf.reduce_mean(tf.log(discriminator(generator(noise_input), trainable = False))) # maxmize cuz d(g) instead of 1 - d(g)
loss = loss_d + loss_g
train_d = tf.train.AdamOptimizer(learning_rate).minimize(loss_d)
train_g = tf.train.AdamOptimizer(learning_rate).minimize(loss_g)

我获得-0.0作为我的损失价值。您能解释一下如何处理甘斯的损失功能吗?

看来,您尝试将发生器和歧视损失总结在一起,这完全是错误的!由于具有真实数据和生成数据的歧视训练,您必须造成两个不同的损失,一个用于真实数据,另一个用于噪声数据(生成(,您将其传递到歧视器网络中。

尝试按以下方式更改您的代码:

1(

loss_d_real = -tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=discriminator(real_data),labels= tf.ones_like(discriminator(real_data))))

2(

loss_d_fake=-tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=discriminator(noise_input),labels= tf.zeros_like(discriminator(real_data))))

然后,区分损失将等于= = lose_d_real lose_d_fake。现在为发电机造成损失:

3(

loss_g= tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=discriminator(genereted_samples), labels=tf.ones_like(genereted_samples)))

Maryam似乎已经确定了您的虚假损失值的原因(即,总结发生器和歧视器损失(。只是想补充一点,您可能应该选择代替亚当的歧视器的随机梯度下降优化器 - 这样做可以在玩Minimax游戏时提供更强的理论保证(来源:来源:https://github.com/soumith/ganhacks(。

最新更新