我正在使用 mxnet 来训练一个 11 类图像分类器。我观察到一个奇怪的行为训练准确率正在缓慢增加并上升到 39%,在下一个 epoch 下降到 9%,然后在其余的训练中保持接近 9%。我使用保存的模型(训练精度为 39%)重新开始训练,保持所有其他参数相同。现在训练准确性再次提高。这可能是什么原因?我无法理解它。而且以这种方式训练模型变得越来越困难,因为它需要我不断地查看训练准确度值。
学习率恒定在 0.01
我正在使用 mxnet 来训练一个 11 类图像分类器。我观察到一个奇怪的行为训练准确率正在缓慢增加并上升到 39%,在下一个 epoch 下降到 9%,然后在其余的训练中保持接近 9%。我使用保存的模型(训练精度为 39%)重新开始训练,保持所有其他参数相同。现在训练准确性再次提高。这可能是什么原因?我无法理解它。而且以这种方式训练模型变得越来越困难,因为它需要我不断地查看训练准确度值。
学习率恒定在 0.01
如您所见,您的后期准确性几乎是随机的。在这种情况下有两个常见问题。
在训练神经网络的过程中,经常会出现准确性提高一段时间然后变得更糟的情况——通常这是由过度拟合引起的。网络“倒霉”并陷入与准确性突然下降相对应的参数空间的不良部分也很常见 - 有时它可以快速恢复,但有时不能。
一般来说,降低学习率是解决这类问题的好方法。此外,设置像FactorScheduler这样的学习率计划可以通过每隔几个 epoch 降低学习率来帮助您实现更稳定的收敛。事实上,这有时可以掩盖选择过高的初始学习率时的错误。
我遇到了同样的问题。我通过使用 (ya)^a 损失函数而不是交叉熵函数(因为 log(0))解决了它。我希望有更好的解决方案来解决这个问题。
这些问题经常出现。我观察到这可能是由于以下原因之一而发生的:
这可能是因为 0log0 返回 NaN。
您可以通过以下方式避免它;
cross_entropy = -tf.reduce_sum(labels*tf.log(tf.clip_by_value(logits,1e-10,1.0)))