训练深度神经网络时,准确性突然下降

时间:2016-05-05 07:10:46

标签: neural-network deep-learning mxnet

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

学习率恒定为0.01

5 个答案:

答案 0 :(得分:9)

因为你可以看到你的后期准确性几乎是随机的。在这种情况下有2个常见问题。

  • 你的学习率很高。试着降低它
  • 您尝试使用的错误(或熵)为您提供NaN值。如果你试图使用带有日志功能的熵,你必须准确使用它们。

答案 1 :(得分:2)

在神经网络训练过程中,常常会在一段时间内提高精度,然后变得更糟 - 通常这是由于过度拟合造成的。对于网络而言,“变得不走运”并且因为精确度突然降低而被撞入参数空间的不良部分也是相当普遍的 - 有时它可以快速恢复,但有时不会。但/有时候不会。

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

  1. 返回 NaN 的内容
  2. 网络的输入不符合预期 - 许多现代框架在某些情况下不会引发错误
  3. 模型层在某些时候会出现不兼容的形状

答案 4 :(得分:-3)

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

你可以避免它;

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