目录

一、train set 和 test set 基础知识

二、分析 loss 和 val_loss (test_loss) 变化情况


一、train set 和 test set 基础知识

  • train set:训练集是用来训练网络模型的数据集。
  • test set:测试集用来评估网络性能的数据集。默认测试集是不参与网络训练,仅用来测试网络性能。
  • 附:development set(也可称为 validation set),主要用来二次微调整、选择特征以及对学习算法作出其他优化的数据集。常规的训练集和测试集的比例为 0.7 : 0.3,引入验证集后常采用 0.6 : 0.2 : 0.2(现在使用较少)。在保证算法稳定的情况下,训练集和测试集的选取会对输出结果的指标造成不同层次的影响(主要还是数据集的分布特性影响)。

二、分析 loss 和 val_loss (test_loss) 变化情况

  • 通常回调显示的 loss 有很多种,如一个总 total_loss 多个子 sub_loss 。但本文主要分析最基础的训练情况(只有一个训练 loss,和一个验证 loss)。下文用 loss 代表训练集的损失值(墨守成规不写成 train_loss);val_loss 代表验证集的损失值(也写成 test_loss)。
  • 一般训练规律:
loss

val_loss

网络情况
下降↓ 下降↓
  • 网络训练正常,最理想情况情况。
下降↓ 稳定/上升↑
  • 网络过拟合。解决办法:
  • ①降低网络性能:在数据集没问题的前提下,向网络某些层的位置添加 Dropout 层(通常会选择较深的层,如一共 100 层,选择在 75 层;或者选择特征最多的层,如 Unet 的最底层等等);或者逐渐减少网络的深度(靠经验删除部分模块)。
  • ②修改数据集:数据集有明显错误则需要重做,问题小可尝试混洗数据集并重新分配,通常开源数据集不容易出现这种情况。
稳定 下降↓
  • 数据集有严重问题,建议重新选择。一般不会出现这种情况。
快速稳定 快速稳定
  • 如果数据集规模不小的情况下,代表学习过程遇到瓶颈,需要减小学习率(自适应动量优化器小范围修改的效果不明显)。
  • 其次考虑修改 batchsize 大小。
  • 如果数据集很规模很小的话代表训练稳定。
上升↑ 上升↑
  • 可能是网络结构设计问题、训练超参数设置不当、数据集需要清洗等问题。
  • 这种情况属于训练过程中最差情况,得一个一个排除问题。
注意:上面提到的“下降”、“稳定”和“上升”是指整体训练趋势。

第一次补充:

  • 一系列的损失值能反应网络在训练过程的“健康程度”(当某一刻损失发生突变,并且一直没恢复,那就说明不健康了)。
  • 权重文件可以每轮都保存,但是个人推荐选择最优评价指标保存。
  • 上面总结仅是广义规律,是用于辅助学习而总结,不保证适用于所有网络。
  • 当网络训练跑偏了后,先检查自己写的网络是否存在小错误。然后检查数据集是否有问题(如果是开源数据集,可以先分个小样本训练来检测网络是否设计问题。如果是自定义数据集,可用一些能处理通用任务的网络(如 Unet 或 ResNet)跑一下来检测)

第二次补充:

  • 为什么说现在有些网络不怎么使用“训练集(0.6)、验证集(0.2)、测试集(0.2)”的划分:其实在大规模的数据集中尤其是开源数据集,很多图像相关特征或者语义分布是集中的。理论上,验证集能一定程度的提高网络学习的全局最优,用来调整网络的学习率优化。但是当训练集和验证的特征分布充分接近时,验证的调整效果就会越来越不明显,所以甚至大家会在开源代码中发现还有使用“训练集(0.9)、测试集(0.1)”的划分。当然不是说验证集就没什么用,个人经验表示:可以向验证集添加多种 data augmentation 来优化训练(如:训练的 size:256x256,验证的 size:512*512。亦或者训练集的 data augmentation 和验证集不一样)。当然这些东西还需要大家去“炼丹”对比。

第三次补充:

  • 很多朋友都在问各种 loss 不正常的原由,其实在正文里面就写了:loss的变化情况只能得出一般规律。光凭 loss 变化没法得出一个确切的问题结论。文中提出的规律方便大家网络调参。一旦网络跑飞了需要结合 loss、评价指标、输出信息(或图像)等一系列结果综合分析。而本文不是提供错误分析的,对应的错误分析需要大家在互联网上搜索、找相关领域的专业人员提问。同时第二次补充的策略虽然有提高网络泛化的作用,但是在高性能网络中需要合理调参,要避免过拟合现象(吐槽:当网络规模远大于数据集规模时,是很容易过拟合的)。

[深度学习] - 网络模型训练过程的 loss 变化分析 (loss / val_loss / test_loss)相关推荐

  1. 深度学习网络模型训练过程中的Loss问题合集

    把数据集随机分为训练集,验证集和测试集,然后用训练集训练模型,用验证集验证模型,根据情况不断调整模型,选择出其中最好的模型,再用训练集和验证集数据训练出一个最终的模型,最后用测试集评估最终的模型 训练 ...

  2. 深度学习模型训练过程

    深度学习模型训练过程 一.数据准备 基本原则: 1)数据标注前的标签体系设定要合理 2)用于标注的数据集需要无偏.全面.尽可能均衡 3)标注过程要审核 整理数据集 1)将各个标签的数据放于不同的文件夹 ...

  3. 【毕业设计_课程设计】基于深度学习网络模型训练的车型识别系统

    文章目录 0 项目说明 1 简介 2 模型训练精度 3 扫一扫识别功能 4 技术栈 5 模型训练 6 最后 0 项目说明 基于深度学习网络模型训练的车型识别系统 提示:适合用于课程设计或毕业设计,工作 ...

  4. 深度学习网络模型训练中loss为nans的总结

    在网络训练中经常出现loss为nans的情况. 主要原因有如下: 梯度爆炸 原因:巨大的梯度值使model的学习过程off-track. 检测方法:查看运行时日志,您应该查看每个迭代的损失值.您会注意 ...

  5. 使用pytorch进行深度学习网络模型训练,实现车型识别

    ​ 简介 通过深度学习技术搭建残差网络,使用 CompsCars数据集进行车型识别模型的训练,并将训练好的模型移植到了Android端,实现了通过手机扫一扫的方式进行汽车车型识别的功能. 项目涉及到的 ...

  6. 【深度学习】——训练过程

    包含哪些层 训练过程 其实就是y=f(x)的求参过程,先给参数一个初始值,然后根据初始函数计算得到预测值,根据预测值和真值计算损失,然后又根据损失函数进行反向传播更新参数,更新参数后,再次计算预测值, ...

  7. 深度学习模型训练的一般方法(以DSSM为例)

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx 本文主要用于记录DSSM模型学习期间遇到的问题及分析.处理经验.先统领性地提出深度学习模型训练 ...

  8. 深度学习100问之提高深度学习模型训练效果(调参经验)

    声明 1)本文仅供学术交流,非商用.所以每一部分具体的参考资料并没有详细对应.如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主删除. 2)博主才疏学浅,文中如有不当之处,请各位指出,共同进步,谢 ...

  9. 深度学习网络模型——RepVGG网络详解、RepVGG网络训练花分类数据集整体项目实现

    深度学习网络模型--RepVGG网络详解.RepVGG网络训练花分类数据集整体项目实现 0 前言 1 RepVGG Block详解 2 结构重参数化 2.1 融合Conv2d和BN 2.2 Conv2 ...

最新文章

  1. Redhat 停止sendmail的方法
  2. Oracle之用户操作
  3. 485转换器产品类型介绍
  4. 关于windows cmd的一些便捷应用
  5. 简单工厂模式、工厂方法模式、抽象工厂模式
  6. mysql使用技巧,使用Mysql的小技巧总结
  7. 前后端分离导出excel_Vue + .NetCore前后端分离的快速发开框架
  8. 高等数学(第七版)同济大学 习题2-1 个人解答
  9. linux hping3命令,系列H - hping3 - 测试网络及主机的安全 - 《Linux命令大全》 - 技术池(jishuchi.com)...
  10. matlab fprintf和disp,matlab中 fprintf 和disp的用法
  11. 从鼠标点击位置发射射线检测是否点击到3D世界中的物体
  12. RK3288开发板,RK3288核心板,瑞芯微RK3288主板资料
  13. Linux系统的时区时间设置
  14. mysql导入数据报错_MySQL导入数据库时报错,MySQL server has go away
  15. 查看tomcat的版本号
  16. 用意念打字,中国脑机接口新纪录诞生!
  17. Vissim与matlab联调环境配置
  18. 晴天小猪历险记之Hill
  19. java 编程思想 并发_java编程思想-java中的并发(一)
  20. 关于raid5数据恢复

热门文章

  1. PIC18F66K80存储器构成(详解)
  2. 关于waitKey()函数按键无反应情况
  3. c#实现浏览器端大文件分块上传
  4. Oracle数据库之oracle update set select from 关联更新
  5. 全志V3s学习记录(4)uboot:开机logo
  6. SQL日期与时间类型
  7. C语言练习:该存多少钱
  8. 【Java】【系列篇】【Spring源码解析】【三】【体系】【BeanFactory体系】
  9. 文本深度表示模型——word2vecdoc2vec词向量模型(转)
  10. 使用poi导出excel