训练集Loss收敛,但是测试集Loss震荡的厉害?

问题场景

今天在调试模型的时候发现训练集上Loss已经收敛了,但是在验证集上Loss震荡的比较厉害,如下图所示:

训练集Loss收敛,但是测试集Loss震荡的厉害?_第1张图片 Loss曲线

原因分析

查阅网上各种博客后发现验证集Loss震荡的原因可能有如下:

  • 数据问题,比如训练集和验证集相差太大,数据量太小;
  • batchsize太小,模型学习的规律不够“普适”;
  • loss函数不合适;
  • 学习率太大,模型陷入了局部最优点;
  • 模型的网络结构存在问题;
  • ......

知道了大概的原因之后,就可以逐个进行排查了。

  • 数据上,检查自己的数据集train和valid的划分情况,基本上数据的分布应该是差不多的;数据量上1w+的图像,应该也还行;
  • loss函数换了其他的进行试验还是一样的效果;
  • 学习率使用动态调整策略,应该没什么问题(后面测试的时候即便调整了初试学习率,最后结果还是类似);
  • 模型使用的是比较经典的超分模型,应该问题不大;
  • 调整了下bs,从32调整到48,发现震荡变小了,效果如下图:
训练集Loss收敛,但是测试集Loss震荡的厉害?_第2张图片 bs=32 训练集Loss收敛,但是测试集Loss震荡的厉害?_第3张图片 bs=48

所以最终分析应该是batchsize太小的原因,如果可以再增大点估计效果更好,但是奈何GPU显存不够了。

总结

如果遇到Loss在训练集上已经收敛,但是在验证集上震荡比较厉害的情况,要按照可能的原因逐条分析,并且进行尝试。尝试的时候也要注意先进行理论上的分析再跑模型,不然的话可能也是白白浪费算力。

训练集Loss收敛,但是测试集Loss震荡的厉害?_第4张图片

参考

【1】https://blog.csdn.net/qq_40689236/article/details/106794155
【2】https://zhuanlan.zhihu.com/p/483488388

本文由 mdnice 多平台发布

你可能感兴趣的:(深度学习)