深度学习 - 理解loss和val_loss变化情况


目录

前言

一、理解train和test

二、理解loss和val_loss


一、理解train和test

train(set):训练集是用来运行学习算法

test(set):测试集用来评估算法性能,但不会据此改变学习算法或参数。因此我们可以引入development(set),也叫validation(set),来调整参数,选择特征,以及对学习算法作出其他决定。本文先忽略验证集讲解。

常规的训练集和测试集的比例为0.7:0.3,引入验证集后常采用0.6:0.2:0.2(该方法现在使用较少)。

在保证算法稳定的情况下,训练集和测试集的选取会对输出结果的指标造成不同层次的影响(玄学 [手动狗头])。


二、理解loss和val_loss

loss:训练集的损失值;val_loss:测试集的损失值。

一般训练规律:

loss下降,val_loss下降:训练网络正常,最理想情况情况。

loss下降,val_loss稳定:网络过拟合。解决办法:①数据集没问题:可以向网络“中间深度”的位置添加Dropout层;或者逐渐减少网络的深度(靠经验删除一部分模块)。②数据集有问题:可将所有数据集混洗重新分配,通常开源数据集不容易出现这种情况。

loss稳定,val_loss下降:数据集有严重问题,建议重新选择。一般不会出现这种情况。

loss稳定,val_loss稳定:学习过程遇到瓶颈,需要减小学习率(自适应动量优化器小范围修改的效果不明显)或batch数量。

loss上升,val_loss上升:可能是网络结构设计问题、训练超参数设置不当、数据集需要清洗等问题。属于训练过程中最差情况。

(注意:上面提到的“下降”、“稳定”和“上升”是指整体训练趋势。)


第一次补充(个人观点):

  • 损失函数通常是反应网络在训练过程的“健康程度”。
  • 权重文件的保存通常参考评价函数。
  • 上面总结仅是广义规律,不保证适用于所有网络。
  • 当网络训练跑偏了后,先检查自己写的网络是否存在小错误。然后检查数据集是否有问题(如果是开源数据集,可以先分个小样本训练来检测网络是否设计问题。如果是自定义数据集,可用一些通用网络(如Unet这种)跑一下来检测)


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM