PyTorch学习(7):学习率
- Pytorch官方文档: https://pytorch-cn.readthedocs.io/zh/latest/
- Pytorch学习文档: https://github.com/tensor-yu/PyTorch_Tutorial
- 参考: https://pytorch.org/docs/stable/optim.html?highlight=lr_scheduler
https://blog.csdn.net/u011995719/article/details/89486359
https://blog.csdn.net/shanglianlm/article/details/85143614
文章目录
- PyTorch学习(7):学习率
- 1.学习率的作用
- 2.PyTorch学习率
- 1)PyTorch学习率更新策略伪代码
- 2)PyTorch学习率调整方法
- 3.自定义调整学习率
- 1)根据PyTorch官方LambdaLR自定义
- 2)自定义函数调整学习率
- 总结
1.学习率的作用
梯度下降法是一个广泛被用来最小化模型误差的参数优化算法。学习率(learning rate) 作为优化算法中重要的超参,其决定着目标函数能否收敛到局部最小值以及何时收敛到最小值。合适的学习率能够使目标函数在合适的时间内收敛到局部最小值。
一般在训练初期给予较大的学习率,随着训练的进行,学习率逐渐减小。学习率什么时候减小,减小多少,这都涉及到学习率的调整方法。
2.PyTorch学习率
PyTorch学习率调整策略通过torch.optim.lr_scheduler接口实现。PyTorch提供的学习率调整策略分为三大类,分别是:
a. 有序调整: 等间隔调整(Step),按需调整学习率(MultiStep),指数衰减调整(Exponential)和余弦退火(Cosine Annealing)。
b. 自适应调整: 自适应调整学习率 ReduceLROnPlateau。
c. 自定义调整: 自定义调整学习率 LambdaLR。
1)PyTorch学习率更新策略伪代码
scheduler = ...
for epoch in range(100):
train(...)
validate(...)
scheduler.step()
2)PyTorch学习率调整方法
PyTorch官方提供了多种学习率更新方法共大家使用,如下所示:
(1)CLASS torch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma=0.1, last_epoch=-1,
verbose=False)
(2)CLASS torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones, gamma=0.1,
last_epoch=-1, verbose=False)
(3)CLASS torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma, last_epoch=-1,
verbose=False)
(4)CLASS torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max, eta_min=0,
last_epoch=-1, verbose=False)
(5)CLASS torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda, last_epoch=-1,
verbose=False)
(6)CLASS torch.optim.lr_scheduler.MultiplicativeLR(optimizer, lr_lambda, last_epoch=-1,
verbose=False)
(7)CLASS torch.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)
(8)CLASS torch.optim.lr_scheduler.CyclicLR(optimizer, base_lr, max_lr, step_size_up=2000,
step_size_down=None, mode='triangular', gamma=1.0, scale_fn=None, scale_mode='cycle', cycle_momentum=True, base_momentum=0.8, max_momentum=0.9, last_epoch=-1, verbose=False)
(9)CLASS torch.optim.lr_scheduler.OneCycleLR(optimizer, max_lr, total_steps=None,
epochs=None, steps_per_epoch=None, pct_start=0.3, anneal_strategy='cos', cycle_momentum=True, base_momentum=0.85, max_momentum=0.95, div_factor=25.0, final_div_factor=10000.0, three_phase=False, last_epoch=-1, verbose=False)
(10)CLASS torch.optim.lr_scheduler.CosineAnnealingWarmRestarts(optimizer, T_0, T_mult=1,
eta_min=0, last_epoch=-1, verbose=False)
3.自定义调整学习率
学习率的调整策略,比较常见的还是根据数据集自行定义,如下所示:
1)根据PyTorch官方LambdaLR自定义
scheduler = torch.optim.lr_scheduler.LambdaLR(optimizer,
lambda step : (1.0-step/args.total_iters) if step <= args.total_iters else 0, last_epoch=-1)
scheduler.step()
2)自定义函数调整学习率
def adjust_learning_rate(optimizer, epoch, args):
"""Sets the learning rate to the initial LR decayed by 10 every 30 epochs"""
lr = args.lr * (0.1 ** (epoch // 30))
for param_group in optimizer.param_groups:
param_group['lr'] = lr
总结
至此,基于PyTorch的学习率调整策略已有了初步了解,实际应用根据需求自行调整。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)