optimizer = dict(type='SGD',
lr=0.01,
momentum=0.9,
weight_decay=0.0001)
lr_config = dict(
policy='CosineAnnealing',
min_lr=0,
warmup='linear',
warmup_iters=4000,
warmup_ratio=0.0001)
优化器optimizer:
链接:https://blog.csdn.net/weixin_39737764/article/details/111231654
***momentum:***上一次梯度更新的权重,一般取值在0.5–0.99之间。通常设为0.9,momentum可以让使用SGD的深度学习方法更加稳定以及快速。
weight_decay: 权重衰减项,防止过拟合的一个参数。在损失函数中,weight decay是放在正则项(regularization)前面的一个系数,正则项一般指示模型的复杂度,所以weight decay的作用是调节模型复杂度对损失函数的影响,若weight decay很大,则复杂的模型损失函数的值也就大。
在 MMClassification 中,我们同样使用 lr_config 配置学习率预热策略,主要的参数有以下几个:
链接: https://mmclassification.readthedocs.io/zh_CN/latest/tutorials/schedule.html#id11
warmup : 学习率预热曲线类别,必须为 ‘constant’、 ‘linear’, ‘exp’ 或者 None 其一, 如果为 None, 则不使用学习率预热策略。
warmup_by_epoch : 是否以轮次(epoch)为单位进行预热。
warmup_iters : 预热的迭代次数,当 warmup_by_epoch=True 时,单位为轮次(epoch);当 warmup_by_epoch=False 时,单位为迭代次数(iter)。
warmup_ratio : 预测的初始学习率 lr = lr * warmup_ratio。
1,参考:https://mp.weixin.qq.com/s?__biz=MzAxMzc2NDAxOQ==&mid=2650431672&idx=2&sn=c0bce23bd917b8654a5174c23349c0c7&chksm=83935464b4e4dd721331c3a726c17dd421b15945708e1330a054190b578c65e76c5b95d0ff3f&scene=27
lr_config = dict(
policy='step',
warmup='linear',
warmup_iters=500,
warmup_ratio=0.001,
step=[8, 9])
total_epochs = 15
说明:
policy: 这里学习率采用多阶段调整的策略。
warmup: 学习率预热的类型,用于初始时稳定训练过程,可选 constant, linear 或 exp。
warmup_iters: 预热的迭代次数。
warmup_ratio: 预热学习率与比值,当使用linear类型时,在初始的迭代次数里,使用1 - (1 - cur_iters / warmup_iters) * (1 - warmup_ratio) 获取当前迭代轮次的学习率,因此越靠前的轮次学习率越小,更多细节可见 MMCV 的 lr_updater.py。
step=[8, 9]: 分别在第 8 和第 9 个 epoch 之后将学习率降为之前的 0.1。
total_epochs = 15: 与原论文不一样的是,这里一共训练 15 个 epochs。
lr_updater.py 链接:
https://github.com/open-mmlab/mmcv/blob/master/mmcv/runner/hooks/lr_updater.py