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