梯度下降:
w
i
+
1
=
w
I
?
l
r
?
g
(
w
i
)
w_{i+1} = w_I - lr\cdot g(w_i) \qquad\qquad\qquad\qquad\qquad\qquad\qquad
wi+1?=wI??lr?g(wi?)
所有的学习率继承于 class _LRScheduler类
属性:
- optimizer:关联的优化器
- last_epoch:记录epoch 数据
- base_lrs:记录初始化学习率
方法:
- step():更新下一个epoch 的学习率
- get_lr():计算下一个epoch的学习率【虚函数】
初始化学习率
- 设置较小数:0.01、0.001、0.0001
- 搜索最大学习率:《Cyclical Learing Rares for Training Neural Networks》
import torch
import torch.optim as optim
model = SunDodel()
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=LR, momentum=0.9)
scheduler_lr = optim.lr_scheduler.StepLR(optimizer, step_size=50, gamma=0.1)
lr_list = list()
for epoch in range(epoch_nums):
lr_list.append(scheduler_lr.get_lr())
for iter_idx , (batch_img , label) in enumerate(train_loader):
optimizer.zero_grad()
out = model(img)
loss = criterion(out, label)
loss.backward()
optimizer.step()
scheduler_lr.step()
1、StepLR
optim.lr_scheduler.StepLR(optimizer, step_size, gamma=0.1, last_epoch=-1, verbose=False)
等间隔调整学习率
调整方式:
l
r
=
l
r
?
g
a
m
m
a
lr = lr*gamma
lr=lr?gamma
2、MultiStepLR
optim.lr_scheduler.MultiStepLR(optimizer, milestones, gamma=0.1, last_epoch=-1, verbose=False)
按指定间隔调整学习率
3、ExponentialLR
optim.lr_scheduler.ExponentialLR(optimizer, gamma, last_epoch=-1, verbose=False)
按指数衰减调整学习率
调整方式:
l
r
=
l
r
?
g
a
m
m
a
e
p
o
c
h
lr = lr*gamma^{epoch}
lr=lr?gammaepoch
4、CosineAnnealingLR
optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max, eta_min=0, last_epoch=-1, verbose=False)
余弦周期调整学习率
调整方式:
l
r
=
l
r
?
g
a
m
m
a
e
p
o
c
h
lr = lr*gamma^{epoch}
lr=lr?gammaepoch
5、ReduceLROnPlateau
optim.lr_scheduler.ReduceLROnPlateau( optimizer, mode='min', factor=0.1, patience=10, threshold=0.0001,
threshold_mode='rel', cooldown=0, min_lr=0, eps=1e-08, verbose=False)
监控指标,当指标不再变化则调整主要参数
- mode:min/max 两种模式
- factor:调整系数
- patience:接受几次不变化
- cooldown:冷却时间,停止监控一段时间
- verbose:是否打印日志
- min_lr:学习率下限
- eps:学习率衰减最小值
Print Out:
Epoch 17: reducing learning rate of group 0 to 1.0000e-02.
Epoch 38: reducing learning rate of group 0 to 1.0000e-03.
Epoch 59: reducing learning rate of group 0 to 1.0000e-04.
6、LambdaLR
optim.lr_scheduler.LambdaLR(optimizer, lr_lambda, last_epoch=-1, verbose=False)
将每个参数组的学习速率设置为给定函数的初始LR时间。当上次_EIRCH=-1时,将初始LR设为LR。
- optimizer (Optimizer) – 优化器
- lr_lambda (function or list) –一种计算给定整数参数时代的乘数因子的函数或这类函数的列表,用于优化 param_group中的每个组。
- last_epoch (int) – 记录epoch 数据. Default: -1.
参考
|