学习率(lr),是用来空值更新的步伐,防止梯度爆炸。以打高尔夫球为例,在我们打第一杆的时候很难一杆进洞,所有需要一个比较大的力量去击球,当球离洞比较近时,就需要调整力的大小,轻轻地击球才能进洞。
学习率调整策略
代码展示:
import torch
# 选择优化器
optimizer = optim.SGD(net.parameters(), lr=LR)
# 设置学习率调整策略
scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=10, gamma=0.1) # step_size表示每是个epoch调整一次,公式为lr = lr * gamma
# 使用,需要放入epoch迭代循环中
scheduler.step()
pytorch中的学习率调整方法
1、torch.optim.lr_scheduler.StepLR()
功能:等间隔调整学习率
主要参数:
step_size:调整间隔数
gamma:调整系数
调整公式:
l
r
=
l
r
∗
g
a
m
m
a
lr = lr * gamma
lr=lr∗gamma
2、torch.optim.lr_scheduler.MultiStepLR()
功能:按照给定间隔调整学习率
主要参数:
milestones:设定调整时刻数,可以是一个列表
gamma:调整系数
调整公式:
l
r
=
l
r
∗
g
a
m
m
a
lr = lr * gamma
lr=lr∗gamma
3、torch.optim.lr_scheduler.ExponentialLR()
功能:按指数衰减调整学习率,每次迭代都会进行调整
主要参数:
gamma:调整系数
调整公式:
l
r
=
l
r
∗
(
g
a
m
m
a
∗
∗
e
p
o
c
h
)
lr = lr *( gamma ** epoch)
lr=lr∗(gamma∗∗epoch)
4、torch.optim.lr_scheduler.CosineAnnealingLR()
功能:余弦周期调整学习率
主要参数:
T_max:下降周期,等于周期的一半
eta_min:学习率下限,下降周期的下限
调整公式:
η
t
=
η
m
i
n
+
1
2
(
η
m
a
x
−
η
m
i
n
)
(
1
+
c
o
s
(
T
c
u
r
T
m
a
x
π
)
)
η_t=η_{min}+\frac{1}{2}(η_{max}-η_{min})(1+cos(\frac{T_{cur}}{T{max}}π))
ηt=ηmin+21(ηmax−ηmin)(1+cos(TmaxTcurπ))
5、torch.optim.lr_scheduler.ReduceLRonPlateau()
功能:监控指标,当指标不再发生变化则调整
主要参数:
mode:min/max两种模式,min模式为所监控的指标如果不下降就调整,min通常观察loss;max为指标不上升就调整,max通常观察准确率
factor:调整系数
patience:接受几次不发生变化
cooldown:停止监控一段时间
verbose:是否打印日志
min_lr:学习率下限
eps:学习率衰减最小值
6、torch.optim.lr_scheduler.LambdaLR()
功能:自定义调整策略
主要参数:
lr_lambda:函数或者是列表