pytorch学习率策略

在进行实验时,调整学习率的方法感觉不对。官方讲解:
https://pytorch.org/docs/stable/optim.html#how-to-adjust-learning-rate

1学习率的位置

torch.optim.lr_scheduler模块提供了一些根据epoch训练次数来调整学习率(learning rate)的方法。一般情况下我们会设置随着epoch的增大而逐渐减小学习率从而达到更好的训练效果。
而torch.optim.lr_scheduler.ReduceLROnPlateau则提供了基于训练中某些测量值使学习率动态下降的方法。

>>> scheduler = ...
>>> for epoch in range(100):
>>>     train(...)
>>>     validate(...)
>>>     scheduler.step()

一定要注意学习率的位置

2 lr_scheduler调整策略:根据训练次数

torch.optim.lr_scheduler中大部分调整学习率的方法都是根据epoch训练次数,这里介绍常见的几种方法,其他方法以后用到再补充。
要了解每个类的更新策略,可直接查看官网doc中的源码,每类都有个get_lr方法,定义了更新策略。

2.1 torch.optim.lr_scheduler.LambdaLR

语法:

class torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda, last_epoch=-1)

更新策略:

                new_lr=λ×initial_lr

其中 new _ lr是得到的新的学习率, initial_lr initial_lr是初始的学习率, λ 是通过参数lr_lambda和epoch得到的。

参数

  1. optimizer (Optimizer):要更改学习率的优化器;
  2. lr_lambda(function or list):根据epoch计算 λ \lambda λ的函数;或者是一个list的这样的function,分别计算各个parameter groups的学习率更新用到的 λ \lambda λ;
  3. last_epoch (int):最后一个epoch的index,如果是训练了很多个epoch后中断了,继续训练,这个值就等于加载的模型的epoch。默认为-1表示从头开始训练,即从epoch=1开始。

2.2torch.optim.lr_scheduler.StepLR

语法:

class torch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma=0.1, last_epoch=-1)

更新策略:
每过step_size个epoch,更新一次

参数:

  1. optimizer (Optimizer):要更改学习率的优化器;
  2. step_size(int):每训练step_size个epoch,更新一次参数;
  3. gamma(float):更新lr的乘法因子;
  4. last_epoch (int):最后一个epoch的index,如果是训练了很多个epoch后中断了,继续训练,这个值就等于加载的模型的epoch。默认为-1表示从头开始训练,即从epoch=1开始。

2.3torch.optim.lr_scheduler.MultiStepLR

语法:

class torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones, gamma=0.1, last_epoch=-1)

更新策略:
每次遇到milestones中的epoch,做一次更新:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值