【问题标题】:Tensorflow - loss not decreasingTensorflow - 损失不减少
【发布时间】:2017-07-19 13:15:26
【问题描述】:

最近,我一直在尝试复制 this post 的结果,但使用的是 TensorFlow 而不是 Keras。但是,我的模型损失没有收敛为in the code provided。我注意使用作者使用的相同参数,即使是那些未明确显示的参数。我的完整代码可见here

我已经尝试了不同的学习率、优化器和批量大小,但这些对结果也没有太大影响。

我在 StackOverflow 和 StackExchange 中发现了许多与此问题相关的其他问题,但其中大多数根本没有答案。然而,带有答案的问题并没有帮助。

我正在使用 TensorFlow 1.1.0、Python 3.6 和 Windows 10。

最奇怪的是我们有相同的数据库和相同的模型,只是不同的框架。因此,它不应该给出完全不同的行为。请问有人对我应该如何解决这个问题有建议吗?

【问题讨论】:

  • 简短评论:您应该在测试期间使用“is_training”来禁用辍学。此外,您的网络似乎总是输出零,因此梯度毫无价值。您是否尝试过禁用 dropout?
  • 为什么你的损失均方误差和为什么 tanh 是你称之为“logits”的东西的激活?
  • 你说得对,@JonasAdler,我没有使用 dropout,因为“is_training”默认值为 False,所以我的输出没有受到影响。我现在尝试将其设置为 true,但问题仍然存在。
  • @RyanStout,我使用的模型、损失和优化器与我提到的the post 完全相同。我也担心 tanh 正在消失渐变,但奇怪的是它在 Tensorflow 中不起作用。
  • 人们在进行二元分类时经常使用交叉熵误差,但这也可以。

标签: python python-3.x tensorflow keras


【解决方案1】:

我运行您的代码基本上没有修改,但我查看了您的 tf_labels 和 logits 的形状,它们并不相同。 logits 的形状为 (batch_size,1,1,1)(因为您使用的是 1x1 卷积滤波器),而 tf_labels 的形状为 (batch_size,1)。我将您的损失线更改为

    loss = tf.reduce_mean(tf.squared_difference(tf.squeeze(tf_labels),
           tf.squeeze(logits)))

并且每个时期的损失都在减少。

【讨论】:

  • 非常感谢@Ryan。有效!在过去的两周里,我试图使用其他已知方法将损失降到最低,但这个错误与完全不同的事情有关。感谢您向我展示发生了什么以及发生的原因。一旦我有足够的声望点,我会投票给你的答案。
  • 谢谢你解决了我的问题。我在回归问题中使用了不正确的交叉熵损失。这种均方损失非常有效。
猜你喜欢
  • 1970-01-01
  • 2017-08-14
  • 2019-01-16
  • 1970-01-01
  • 2017-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-16
相关资源
最近更新 更多