训练模型的流程是什么
1、数据预处理:包括数据清洗、划分数据集 、数据增强等
2、定义模型
3、定义损失函数和优化器
4、配置超参数
5、开始训练,观察训练损失和验证损失
6、根据训练结果重新调整超参数或者网络直到模型性能满意
训练集、测试集、验证集的作用和区别
- 训练集: 训练集是原始数据集中划分出来的一大部分用于训练模型的数据集合。
- 验证集: 验证集是从原始数据集中划分出来的一小部分,用于调整模型的超参数,以及在训练过程中评估模型的泛化能力。
- 测试集: 测试集是独立于训练集和验证集的数据集合,用于评估模型在完全未见过的数据上的性能。
PS:训练集和验证集的划分一般是8:2、7:3、9:1
模型训练中的初始学习率如何选取
在借鉴该模型的论文上推荐的学习率的同时在根据自己的情况做下调整,如果自己的batch size比论文中设置的要大,那么学习率可以考虑设置得比论文中的大一点,反之就更小一点,然后如果是微调预训练模型的话,那么初始化的学习率就要调得比较小,防止预训练模型的权重发生大的更改。
学习率过大过小会怎么样
学习率过大
- 错过最优解:学习率过大时,模型可能无法在损失函数的最小值处稳定下来,而是持续地在最小值周围“跳跃”,从而错过局部或全局最优解。
- 梯度爆炸:学习率过高可能导致梯度值变得异常大,这不仅会导致模型参数的更新步长过大,还可能超出计算设备的数值表示范围,从而破坏模型的训练过程。
学习率过小
- 收敛速度慢:过小的学习率会导致模型参数更新缓慢,需要更多的迭代次数才能达到收敛,这将显著增加训练时间和计算资源消耗。
- 无法达到最佳性能:如果学习率设置得太小,模型可能在未达到最优解之前就停止了更新陷入局部最小值,即提前收敛,导致模型性能不佳。
训练中为什么要设置学习率衰减
我们在训练中的初始学习率一般设置得比较大,这是因为较高的学习率可以更快地探索损失空间,从而加速收敛过程。但是当快要收敛的时候,过大的学习率会导致在最优解附近震荡无法完成收敛。所以我们需要设置学习率衰减,在前期的时候使用较高的学习率加快收敛速度,后期使用较小的学习率防止损失震荡无法收敛。
学习率衰减的方法有什么
常用的学习率衰减方法有
固定步长衰减:每隔一定的迭代次数(或者epoch),就将学习率乘以一个固定的比例
多步长衰减:在指定的训练周期(或epoch)达到预设的里程碑时,将学习率减少为原来的一定比例。
余弦退火衰减:它按照余弦函数的周期来调整学习率,即学习率先降低然后在回到初始的学习率然后一直循环。
自适应衰减:当验证集上的性能不再提升时,降低学习率。
Warm Up的作用是什么
模型训练的时候一开始模型对于训练数据的数据分布理解为零,这个时候使用比较大的学习率的话容易对前面的批次数据过拟合,从而影响模型的性能。使用了warm-up的话,前期以比较小的学习率训练,等模型有了正确的先验知识之后在使用比较大的学习率进行训练,这样会使得训练比较平稳。而且warm-up可以帮助解决梯度爆炸或者梯度消失。
怎么判断欠拟合和过拟合
欠拟合:欠拟合是指模型不能学习到训练数据的潜在模式,这通常是因为模型的复杂度不足,导致它无法充分学习数据中的特征。
判断欠拟合:训练集上的正确率很低,验证集上的正确率也很低则存在欠拟合现象
过拟合:过拟合是指模型在训练过程中记住了训练数据的特定细节,导致模型过度依赖训练数据的特定细节,这通常是模型的复杂度太高,或者训练数据的数量太少导致的。
判断过拟合:训练集正确率很高,验证集正确率很低。或者验证集正确率不升反降且持续降低则也可能出现过拟合现象。
过拟合的话怎么解决
增加训练数据的数量
使用数据增强技术
使用正则化技术,如L1、L2、Dropout等
欠拟合的话怎么解决
增加模型复杂度
对数据进行预处理
增加训练的eopch数量
OOM(显存爆炸)怎么解决
1、减少batch size的大小
2、加载预训练模型的使用使用cpu加载
3、使用梯度积累技术,例如使用batch size=2去进行训练,然后积累两次梯度在进行更新一次模型权重,效果跟batch size=4差不多,但是能够节省很多显存。
4、保留loss用于显示的时候,使用loss.item()而不是直接使用loss
梯度爆炸怎么解决
梯度爆炸指的是在反向传播过程中,梯度的值变得非常大,以至于它们超过了计算机可以表示的数值范围,通常表现为loss为NaN。
1、降低学习率
2、限制梯度的最大值
3、使用L2正则
梯度消失怎么解决
当网络的层数过深的时候可能会出现梯度消失的可能,可以使用残差连接来解决这个问题。
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » 对于深度学习中训练模型的体会
发表评论 取消回复