一般网络训练都要把这些做到
做到以后方便我们进行调整,配置获得更好的效果
之后我们的实战任务会进一步详细解析这里的每一个内容的
1 训练前
训练前,一般我们会读入网络结构参数,训练参数等
-
一般我们会通过一些配置文件(如yaml文件)将训练,网络参数读入配置参数,用到OmegaConf库 会非常好用~【Python进阶】OmegaConf库:高效配置项管理 | 访问配置文件,修改合并配置文件-CSDN博客
-
或者我们会通过终端去进行参数的读入,用到argparse库,也非常好用【Python进阶】argparse库基础用法全总结:高效脚本参数解析 | 参数类型使用代码_python argparse nargs-CSDN博客
训练和模型的各种参数读入后,首先应该将一些配置参数进行输出
同时应该新建日志文件夹,一般我觉得可以用logging模块,将必要的参数进行保存,方便后续做对比实验Python实用教程系列——Logging日志模块 - 知乎 (zhihu.com)
我们会用这些参数初始化数据集,我们在初始化数据集和网络后,应该适当进行init终端输出
初始化优化器
2 训练时
一般用tqdm库在epoch层面上进行输出,可以可视乎训练过程,方便查看时间Py之tqdm:tqdm库的简介、安装、使用方法详细攻略_vscode中安装tqdm库-CSDN博客
在iteration层面上,可以进行保存必要的损失到日志中,日志的话一般我们习惯训练时候获得时间,建立当前时间的一个文件夹,将日志保存到这里
一个epoch结束后,画出损失变化,用matplotlib库
十分钟|matplotlib上手,开启你的python可视化 - 知乎 (zhihu.com)
我们这时候会进行测试,测试的过程中可以保存模型,保存模型一般的话就是
方式一:每隔一定阶段保存一次模型
方式二:当测试时候的结果更好的时候保存
3 训练后
根据情况调整网络结构和参数
一般来说,根据网络的过拟合或者欠拟合,进行更改网络的组成,更改学习率,优化器等操作