python - GAN 中的损失函数

标签 python tensorflow machine-learning neural-network generative

我正在尝试构建一个简单的 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作为我的损失值。您能解释一下如何处理 GAN 中的损失函数吗?

最佳答案

看来你试图将生成器和鉴别器的损失加在一起,这是完全错误的! 由于鉴别器同时使用真实数据和生成数据进行训练,因此您必须创建两种不同的损失,一种用于真实数据,另一种用于传递到鉴别器网络的噪声数据(生成)。

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

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))))

那么判别器损失将等于 = loss_d_real+loss_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)))

关于python - GAN 中的损失函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49988496/

相关文章:

python - 相互匹配两个正则表达式

python - 套接字发送超时 - 更改是否安全?

python - 来自两个一维张量的不同索引对

machine-learning - Keras运行时错误: GpuCorrMM failed to allocate working memory of 576 x 802816

dataframe - 机器学习中的数据类型

Python读取Windows命令行输出

docker - Tensorflow服务Docker镜像安装错误curl:(56)GnuTLS recv错误(-54):pull函数错误

python - Tensorflow:对数据进行切片并对每个切片应用卷积

r - 了解动态时间扭曲

python - 调用 Flask app.run 后,我可以让 Python 代码继续执行吗?