14

我正在使用 mxnet 来训练一个 11 类图像分类器。我观察到一个奇怪的行为训练准确率正在缓慢增加并上升到 39%,在下一个 epoch 下降到 9%,然后在其余的训练中保持接近 9%。我使用保存的模型(训练精度为 39%)重新开始训练,保持所有其他参数相同。现在训练准确性再次提高。这可能是什么原因?我无法理解它。而且以这种方式训练模型变得越来越困难,因为它需要我不断地查看训练准确度值。

学习率恒定在 0.01

4

5 回答 5

16

如您所见,您的后期准确性几乎是随机的。在这种情况下有两个常见问题。

  • 你的学习率很高。尝试降低它
  • 您尝试使用的错误(或熵)为您提供 NaN 值。如果您尝试将熵与对数函数一起使用,则必须精确使用它们。
于 2016-05-05T08:53:32.810 回答
3

在训练神经网络的过程中,经常会出现准确性提高一段时间然后变得更糟的情况——通常这是由过度拟合引起的。网络“倒霉”并陷入与准确性突然下降相对应的参数空间的不良部分也很常见 - 有时它可以快速恢复,但有时不能。

一般来说,降低学习率是解决这类问题的好方法。此外,设置像FactorScheduler这样的学习率计划可以通过每隔几个 epoch 降低学习率来帮助您实现更稳定的收敛。事实上,这有时可以掩盖选择过高的初始学习率时的错误。

于 2016-11-13T04:38:13.123 回答
0

我遇到了同样的问题。我通过使用 (ya)^a 损失函数而不是交叉熵函数(因为 log(0))解决了它。我希望有更好的解决方案来解决这个问题。

于 2017-08-30T06:40:25.640 回答
0

这些问题经常出现。我观察到这可能是由于以下原因之一而发生的:

  1. 返回 NaN 的东西
  2. 网络的输入不如预期 - 许多现代框架在某些此类情况下不会引发错误
  3. 模型层在某些时候得到不兼容的形状
于 2021-04-09T04:49:21.027 回答
-2

这可能是因为 0log0 返回 NaN。

您可以通过以下方式避免它;

cross_entropy = -tf.reduce_sum(labels*tf.log(tf.clip_by_value(logits,1e-10,1.0)))

于 2016-05-11T21:59:58.870 回答