赞
踩
等间隔调整学习率,调整倍数为 gamma 倍,调整间隔为 step_size。间隔单位是step。需要注意的是, step 通常是指 epoch,不要弄成 iteration 了。学习率调整: l r = l r ∗ g a m m a lr = lr * gamma lr=lr∗gamma
torch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma=0.1, last_epoch=-1)
参数:
按设定的间隔调整学习率。这个方法适合后期调试使用,观察 loss 曲线,为每个实验定制学习率调整时机。
与StepLR的区别是,调节的epoch是自己定义,衰减是由外部的设置来更改的。
例如:在指定的epoch值,如[5,20,25,80]处对学习率进行衰减,
l
r
=
l
r
∗
g
a
m
m
a
lr = lr * gamma
lr=lr∗gamma。
torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones, gamma=0.1, last_epoch=-1)
参数:
指数衰减调整学习率的调整公式: l r = l r ∗ g a m m a e p o c h lr=lr∗gamma^{epoch} lr=lr∗gammaepoch
torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma, last_epoch=-1)
参数:
gamma:学习率调衰减的底数,选择不同的gamma值可以获得幅度不同的衰减曲线,指数为 epoch,即 gamma**epoch 或
g
a
m
m
a
e
p
o
c
h
gamma^{epoch}
gammaepoch
以初始学习率为最大学习率,以2 ∗ T _ m a x 2 ∗ T_max2∗T_max 为周期,在一个周期内先下降,后上升。
torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max, eta_min=0, last_epoch=-1)
参数:
当某指标不再变化(下降或升高),调整学习率,这是非常实用的学习率调整策略。例如,当验证集的 loss 不再下降时,进行学习率调整;或者监测验证集的 accuracy,当accuracy 不再上升时,则调整学习率。
torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min', factor=0.1, patience=10, verbose=False, threshold=0.0001, threshold_mode='rel', cooldown=0, min_lr=0, eps=1e-08)
参数
为不同参数组设定不同学习率调整策略。调整规则为, l r = b a s e l r ∗ l a m b d a ( l a s t _ e p o c h ) lr=base_{lr}∗lambda(last\_epoch) lr=baselr∗lambda(last_epoch)这在fine-tune 中十分有用,我们不仅可为不同的层设定不同的学习率,还可以为其设定不同的学习率调整策略。
torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda, last_epoch=-1)
参数:
lr_lambda(function or list)- 一个计算学习率调整倍数的函数,输入通常为 step,当有多个参数组时,设为 list。
Warmup是在ResNet论文中提到的一种学习率预热的方法,指训练开始的时候先选择使用一个较小的学习率,训练了一些epoches或者steps(比如4个epoches,10000steps),再修改为预先设置的学习来进行训练。
由于刚开始训练时,模型的权重(weights)是随机初始化的,此时若选择一个较大的学习率,可能带来模型的不稳定(振荡),选择Warmup预热学习率的方式,可以使得开始训练的几个epoches或者一些steps内学习率较小,在预热的小学习率下,模型可以慢慢趋于稳定,等模型相对稳定后再选择预先设置的学习率进行训练,使得模型收敛速度变得更快,模型效果更佳。
实验设置:使用的学习率衰减策略为MultiStep,milestones设置为[15, 20],即学习率会在第16个epoch和第21个epoch衰减,乘以0.1的系数。整个训练过程持续了30个epoch,初始学习率
为5,warmup_epochs设置为10,warmup_factor设置为0.001。
如果不适用warm-up,学习率的变化曲线如下,横坐标为epoch(从0开始索引),纵坐标为学习率。
常见的warmup方式有三种:constant,linear和exponent。
原文链接:1. https://blog.csdn.net/qq_35091353/article/details/117322293
2. https://zhuanlan.zhihu.com/p/508953700
3. Detectron2之lr_scheduler https://zhuanlan.zhihu.com/p/99568607
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。