PyTorch学习(7):学习率

本文介绍了PyTorch中学习率的重要性和调整策略。详细解释了PyTorch提供的多种学习率调整方法,包括有序调整、自适应调整和自定义调整等,并提供了具体的实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


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的学习率调整策略已有了初步了解,实际应用根据需求自行调整。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Peanut_范

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值