训练深度学习模型的时候,得看损失曲线和性能曲线来判断深度学习模型的训练过程是否收敛。
这花费了我很多时间。有时,肉眼判断的收敛时间并不准确。
有没有一个算法或包可以自动判断深度学习模型的训练过程是否收敛?
冒着让你失望的风险,我相信不存在这样的通用算法。根据我的经验,这取决于您想要实现的目标、哪些指标对您很重要以及您愿意让培训持续多长时间。
我已经看到验证损失急剧上升(过度拟合的迹象),而验证集上的其他指标(本例中为 mIoU)仍在改进。在这些情况下,您需要知道您的目标是什么。
您的损失有可能(尽管非常罕见)在相当长的时间内上升,然后再次下降并达到比以前更好的水平。没有办法预见到这一点。
最后,如果您有大量训练数据,这可以说是一种常见情况,您的验证损失可能会不断下降,但速度会越来越慢。在这种情况下,如果你有无限的时间,最好的策略是让它无限期地进行训练。在实践中,这是不可能的,您需要在性能和训练时间之间找到适当的平衡。
如果您确实需要一种算法,我建议使用这个非常简单的算法:
M(i)
epoch 之后计算验证指标 i
。我们假设 M(i)
越高越好。根据一个训练周期的持续时间修复 k
一个整数(k~3
应该可以解决问题)n
,您有M(n) > max(M(n+1), ..., M(n+k))
,请停止并保留您在纪元n
时拥有的网络。它远非完美,但对于简单的任务来说应该足够了。
[编辑]如果您还没有使用它,我邀请您使用 TensorBoard 来可视化整个训练过程中指标的演变。一旦设置完毕,就节省了巨大的时间。