目前训练了不少模型,不断地试错前进,最近又犯了以前犯过的错误感觉优点不应该,写个专栏记录一下给自己提个醒,也给博友们提供一些参考的资料。
数据来源与去处
训练模型开始之前就需要考虑怎么存储和标注数据,不同的硬盘有不同的存储方式:
- 机械硬盘对jpg、png数据不友好,我们可以考虑将64张图片或者更多图片直接保存为npy格式,考虑到硬盘空间我们还可以直接做好归一化(这又会涉及到硬盘的读取速度和cpu线程数),
- 我们甚至可以用机械硬盘组个raid盘,这样速度能快不少。
数据的加载
有一些数据是没有现成的加载器的,需要我们在现有的基础上做修改,如果数据不是非常特殊,还是在pytorch的接口上做修改,能极大提高数据加载效率
数据归一化
数据归一化的方式很多
- 对图片我更喜欢:img / 255
- 对其它数据:(data - mean)/ std
- 可以多做尝试或者看论文的操作
训练前检查数据
准备好数据后不要着急训练(人生不缺这几个小时),做一下数据检查,检查图像、标签是否对的上,数据是否缺失。
训练前做小批量训练
选取一部分数据(数据总量的1%即可)进行训练,训练集和测试集都是这个数据,训练50个epoch看看,看看模型收敛情况,根据收敛情况调整学习率和批次。
- 如果训练50轮没有明显的收敛趋势,大概率是学习率太高了(也可能是数据有问题)
- 如果训练后期训练集的准确率在70%以上的某个值震荡,依旧可能是学习率太高了
- 如果是训练集100%,测试集98~99%,可能是模型有dropout属于正常现象
保存模型训练过程的参数
模型训练过程中可能会出现各种意外导致的训练中断,因此需要保存多个模型节点数据,学习率等信息,方便后续断点继续训练
模型测试
模型测试时一定要开启eval模式,不然你会看到各种各种的结果
模型评估
模型的评估不要只盯着准确率,也要看一下损失、召回率,计算ROC
结尾
这篇博客内容会持续更新,如果你遇到过很离谱的问题可以写在评论区,我会把它补充上去。感谢您的观看,觉得写的还可以请帮忙点个赞和收藏!