1、StepLR
先上API:
# optimizer:优化器
# step_size:每隔多少epoch改变学习率lr
# gamma=0.1:训练到这一部分epoch×上一epoch的lr
torch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma=0.1,last_epoch=-1, verbose=False)
关于gamma=0.1,也就是说1-10个epoch,lr=0.1,则10-20的lr为0.1×0.1;
2、MultiStepLR
torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones,gamma=0.1, last_epoch=-1, verbose=False)
只对StepLR的API里面的step_size进行改动,变为milestones,milestones可以设置为[10,40,60],即是指前10个epoch的lr为0.1,10-40的epoch为0.1×0.1,40-60的epoch的lr为0.1×0.1×0.1,
注: 大多数都采用此方法;
3、ExponentialLR
API:
torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma, last_epoch=-1, verbose=False)
此方法容易造成过早的停止训练,学习率更新方式为:
l
r
=
l
r
×
γ
e
p
o
c
h
lr=lr×\gamma^{epoch}
lr=lr×γepoch
4、CosineAnnealingLR
API:
torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max,eta_min=0,last_epoch=-1,verbose=False)
学习率更新公式为:
η
m
i
n
\eta_{min}
ηmin为设定的最小学习率,
η
m
a
x
\eta_{max}
ηmax为设置的最大学习率,
T
m
a
x
T_{max}
Tmax为epoch周期的一半,
T
c
u
r
T_{cur}
Tcur为当前的epoch,