Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python GANs中的损失函数_Python_Tensorflow_Machine Learning_Neural Network_Generative - Fatal编程技术网

Python GANs中的损失函数

Python GANs中的损失函数,python,tensorflow,machine-learning,neural-network,generative,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))) # maxmi

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

似乎你试图将发生器和鉴别器的损失相加,这是完全错误的! 由于鉴别器同时包含真实数据和生成的数据,因此必须创建两个不同的损失,一个用于真实数据,另一个用于传递到鉴别器网络的噪声数据(生成)

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

(一)

(二)

然后鉴别器损耗将等于=损耗为真+损耗为假。 现在为发电机创建损耗:

(三)


Maryam似乎已经确定了虚假损耗值的原因(即发电机和鉴别器损耗之和)。只是想补充一点,您可能应该为鉴别器选择随机梯度下降优化器来代替Adam-这样做可以在玩极小极大游戏时为网络的收敛提供更强的理论保证(来源:)

如果看得不太深入,你可能没有设置正确的学习速度,导致你的体重爆炸,给你NaN's.Opps!我的意思是-0.0而不是NaNs。很抱歉我会编辑它。我还没有自己编写代码,所以我不会回答,但我相信您需要在
最小化
函数上设置
变量列表
属性。您要做的是在所有变量上定义两个优化器。如果您的鉴别器和生成器在同一个图形中,则您正在执行两个相反的更新。鉴别器优化器应该只更新鉴别器的权重,同样,也应该更新生成器的优化器。您应该使用
tf.variable\u scope
来帮助将变量组织为两组。
tf.variable\u scope
的另一种方法是通过继承
tf.keras.Model
来组织事物,如中所示。(该示例正在如火如荼地执行,但通过对训练循环进行一些调整,将其切换到图形构建应该相对容易)。然后你会得到每个组件的
.variables
属性。我主要依赖于此:它使用var_list.Hi,你能改进代码格式以澄清你的答案吗?请参阅
loss_d_real = -tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=discriminator(real_data),labels= tf.ones_like(discriminator(real_data))))
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_g= tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=discriminator(genereted_samples), labels=tf.ones_like(genereted_samples)))