图像分类任务的训练小Trick

这篇文章的方法我并没有实践完,且一直在完善,希望大家能多提提建议和意见,一起讨论。

训练技巧

1.优化器的选择

        常用的SGD+Momentum、RMSProp、Adam、AdaDelt。其中SGD+Momentum应用最为广泛在学术界和工业界。

        SGD+Momentum相比于其他优化器,虽然收敛比其他的慢,但是如果精调(学习率和其他参数),并且迭代轮数足够的多,该优化器最终的性能会比其他的更好

2.学习率的设置

学习率的选择往往和优化器以及数据和任务有关系。如果对于比较难训练的数据集或者模型,初始学习率一般设置的比较大,而且如果学习率设置过大,损失会及其的不稳定,过小的话,损失就得不到更新,所以我们一般采用动态的学习率调整策略,这里附上一个官方的链接,里面有例子,我觉得讲的很好。
学习率调整策略

里面讲了这么多使用方法,需要自己不断地实验。在训练初始阶段,由于权重处于随机初始化的状态,损失函数相对容易进行梯度下降,所以可以设置一个较大的学习率。在训练后期,由于权重参数已经接近最优值,较大的学习率无法进一步寻找最优值,所以需要设置一个较小的学习率。在训练整个过程中,很多研究者使用的学习率下降方式是piecewise_decay,即阶梯式下降学习率,如在ResNet50标准的训练中,设置的初始学习率是0.1,每30epoch学习率下降到原来的1/10,一共迭代120epoch。这有一篇对SGD讲解很好的文章给大家奉上python torch.optim.SGD-CSDN博客

        

warmup策略

如果使用较大的batch_size训练神经网络时,我们建议您使用warmup策略。Warmup策略顾名思义就是让学习率先预热一下,在训练初期我们不直接使用最大的学习率,而是用一个逐渐增大的学习率去训练网络,当学习率增大到最高点时,再使用学习率下降策略中提到的学习率下降方式衰减学习率的值。实验表明,在batch_size较大时,warmup可以稳定提升模型的精度。在训练MobileNetV3等batch_size较大的实验中,我们默认将warmup中的epoch设置为5,即先用5epoch将学习率从0增加到最大值,再去做相应的学习率衰减。

weight_decay的选择

过拟合是机器学习中常见的一个名词,简单理解即为模型在训练数据上表现很好,但在测试数据上表现较差,在卷积神经网络中,同样存在过拟合的问题,为了避免过拟合,很多正则方式被提出,其中,weight_decay是其中一个广泛使用的避免过拟合的方式。Weight_decay等价于在最终的损失函数后添加L2正则化,L2正则化使得网络的权重倾向于选择更小的值,最终整个网络中的参数值更趋向于0,模型的泛化性能相应提高。在各大深度学习框架的实现中,该值表达的含义是L2正则前的系数,在paddle框架中,该值的名称是l2_decay,所以以下都称其为l2_decay。该系数越大,表示加入的正则越强,模型越趋于欠拟合状态。在训练ImageNet的任务中,大多数的网络将该参数值设置为1e-4,在一些小的网络如MobileNet系列网络中,为了避免网络欠拟合,该值设置为1e-5~4e-5之间。当然,该值的设置也和具体的数据集有关系,当任务的数据集较大时,网络本身趋向于欠拟合状态,可以将该值适当减小,当任务的数据集较小时,网络本身趋向于过拟合状态,可以将该值适当增大。

总结:欠拟合(训练集测试集精度都不高)->weight_decay设置小一点一般5e-4,4e-5

        过拟合(训练集精度远远大于测试集)->weight_decay设置稍微大一点1e-4

采用数据增广方式:

一、数据增广 — PaddleClas 文档 这个文档总结的不错

比如随机裁剪random_crop;标签和土相混合mix_up;随机遮掩cutout;cutmix

通过train_acc和test_acc确定调优策略

在训练网络的过程中,通常会打印每一个epoch的训练集准确率和验证集准确率,二者刻画了该模型在两个数据集上的表现。通常来说,训练集的准确率比验证集准确率微高或者二者相当是比较不错的状态。如果发现训练集的准确率比验证集高很多,说明在这个任务上已经过拟合,需要在训练过程中加入更多的正则,如增大l2_decay的值,加入更多的数据增广策略,加入label_smoothing策略等;如果发现训练集的准确率比验证集低一些,说明在这个任务上可能欠拟合,需要在训练过程中减弱正则效果,如减小l2_decay的值,减少数据增广方式,增大图片crop区域面积,减弱图片拉伸变换,去除label_smoothing等。

大总结:在训练过程中,记得保存每轮的日志(loss和acc),先训练几个epoch观察如果发现,训练集精度远远大于测试集,则出现了过拟合的现象,就可以采用一些数据增广的方式,或者增加正则项weight_decay的大小,或者给模型加入更多的正则项,如果还有问题就好好检查一下自己的模型代码是否有问题;欠拟合则相反。多做实验多比较,精度几乎都是总结并且调参调出来的。

参考文章及文献:

[1]图像分类任务中的训练奇技淫巧 - 知乎 (zhihu.com)

[2]P. Goyal, P. Dolla ́r, R. B. Girshick, P. Noordhuis, L. Wesolowski, A. Kyrola, A. Tulloch, Y. Jia, and K. He. Accurate, large minibatch SGD: training imagenet in 1 hour. CoRR, abs/1706.02677, 2017.

[3]C.Szegedy,V.Vanhoucke,S.Ioffe,J.Shlens,andZ.Wojna. Rethinking the inception architecture for computer vision. CoRR, abs/1512.00567, 2015.

[4]学习率调整策略

学习资料:

1.数据增强策略(一)-腾讯云开发者社区-腾讯云

2.一个独立的数据增强库,可使用在pytorch或Keras上。

pip install Augmentor

https://github.com/OUCMachineLearning/OUCML/blob/master/%E4%BB%A3%E7%A0%81%E6%8A%80%E5%B7%A7%E6%B1%87%E6%80%BB/%E5%9B%BE%E5%83%8F%E6%95%B0%E6%8D%AE%E5%A2%9E%E5%BC%BA.md

3.网络设置技巧大全:https://github.com/OUCMachineLearning/OUCML/tree/master/%E4%BB%A3%E7%A0%81%E6%8A%80%E5%B7%A7%E6%B1%87%E6%80%BB

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值