【问题标题】:Three loss functions in a Tensorflow GANTensorflow GAN 中的三个损失函数
【发布时间】:2017-12-13 12:55:53
【问题描述】:

我一直在关注O'Reilly 上的指南,当谈到他们的训练和损失函数时,我感到很困惑。

d_loss_real = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(Dx,tf.ones_like(Dx)))
d_loss_fake =tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(Dg,tf.zeros_like(Dg)))

g_loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(Dg, tf.ones_like(Dg)))

这感觉就像应该将 d_loss_real 和 d_loss_fake 添加到一个变量中,并且应该像这样最小化:

d_loss = d_loss_real + d_loss_fake

d_trainer = tf.train.AdamOptimizer(0.0003).minimize(d_loss, var_list=d_vars)

但是,该指南指定了三个训练函数而不是两个,一个用于 d_loss_real、d_loss_fake 和 g_loss。

# Train the discriminator
d_trainer_fake = tf.train.AdamOptimizer(0.0003).minimize(d_loss_fake, 
var_list=d_vars)
d_trainer_real = tf.train.AdamOptimizer(0.0003).minimize(d_loss_real, 
var_list=d_vars)
# Train the generator
g_trainer = tf.train.AdamOptimizer(0.0001).minimize(g_loss, var_list=g_vars)

我觉得这是不对的,还是我错过了什么?

【问题讨论】:

    标签: python python-3.x machine-learning tensorflow neural-network


    【解决方案1】:

    您只需要两个优化器,一个用于生成器,一个用于鉴别器网络:

    1) discriminator_trainer = tf.train.AdamOptimizer(0.0003).minimize(d_loss, var_list=d_vars)

    2)generator_trainer = tf.train.GradientDescentOptimizer(0.0003).minimize(g_loss, var_list=g_vars)

    -在生成器网络中使用梯度下降优化器以获得更好的结果。

    【讨论】:

      猜你喜欢
      • 2018-10-03
      • 2020-08-12
      • 2021-07-18
      • 2020-08-26
      • 2019-01-20
      • 1970-01-01
      • 2019-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多