Pytorch中的学习率调整:lr_scheduler,ReduceLROnPlateau

  • torch.optim.lr_scheduler:该方法中提供了多种基于epoch训练次数进行学习率调整的方法;

  • torch.optim.lr_scheduler.ReduceLROnPlateau:该方法提供了一些基于训练过程中的某些测量值对学习率进行动态的下降.

lr_scheduler调整方法一:根据epochs

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

将每个参数组的学习率设置为给定函数的初始值,当last_epoch=-1时,设置初始的lr作为lr;

参数:

optimizer:封装好的优化器

lr_lambda(function or list):一个计算每个epoch的学习率的函数或者一个list;

last_epoch:最后一个epoch的索引

eg:

>>> # Assuming optimizer has two groups.
>>> lambda1 = lambda epoch: epoch // 30
>>> lambda2 = lambda epoch: 0.95 ** epoch
>>> scheduler = LambdaLR(optimizer, lr_lambda=[lambda1, lambda2])
>>> for epoch in range(100):
>>>     scheduler.step()
>>>     train(...)
>>>     validate(...)
CLASS torch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma=0.1, last_epoch=-1)

当epoch每过stop_size时,学习率都变为初始学习率的gamma倍

eg:

>>> # Assuming optimizer uses lr = 0.05 for all groups
>>> # lr = 0.05     if epoch < 30
>>> # lr = 0.005    if 30 <= epoch < 60
>>> # lr = 0.0005   if 60 <= epoch < 90
>>> # ...
>>> scheduler = StepLR(optimizer, step_size=30, gamma=0.1)
>>> for epoch in range(100):
>>>     scheduler.step()
>>>     train(...)
>>>     validate(...)
CLASS torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones, gamma=0.1, last_epoch=-1)

当训练epoch达到milestones值时,初始学习率乘以gamma得到新的学习率;

eg:

>>> # Assuming optimizer uses lr = 0.05 for all groups
>>> # lr = 0.05     if epoch < 30
>>> # lr = 0.005    if 30 <= epoch < 80
>>> # lr = 0.0005   if epoch >= 80
>>> scheduler = MultiStepLR(optimizer, milestones=[30,80], gamma=0.1)
>>> for epoch in range(100):
>>>     scheduler.step()
>>>     train(...)
>>>     validate(...)
CLASS torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma, last_epoch=-1)

每个epoch学习率都变为初始学习率的gamma倍

CLASS torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max, eta_min=0, last_epoch=-1)

利用cos曲线降低学习率,该方法来源SGDR,学习率变换如下公式:
η t = η min ⁡ + 1 2 ( η max ⁡ − η min ⁡ ) ( 1 + cos ⁡ ( T c u r T max ⁡ π ) ) \eta _ { t } = \eta _ { \min } + \frac { 1 } { 2 } \left( \eta _ { \max } - \eta _ { \min } \right) \left( 1 + \cos \left( \frac { T _ { c u r } } { T _ { \max } } \pi \right) \right) ηt​=ηmin​+21​(ηmax​−ηmin​)(1+cos(Tmax​Tcur​​π))
其中 η m a x \eta_{max} ηmax​为初始学习率, T c u r T_{cur} Tcur​为当前epochs;eta_min表示公式中的 η m i n \eta_{min} ηmin​,常设置为0;

lr_scheduler调整方法一:根据测试指标

CLASS torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min', factor=0.1, patience=10, verbose=False, threshold=0.0001, threshold_mode='rel', cooldown=0, min_lr=0, eps=1e-08)

当参考的评价指标停止改进时,降低学习率,factor为每次下降的比例,训练过程中,当指标连续patience次数还没有改进时,降低学习率;

参考

https://pytorch.org/docs/stable/optim.html

Pytorch中的学习率调整lr_scheduler,ReduceLROnPlateau相关推荐

  1. Pytorch中的学习率调整方法

    在梯度下降更新参数的时,我们往往需要定义一个学习率来控制参数更新的步幅大小,常用的学习率有0.01.0.001以及0.0001等,学习率越大则参数更新越大.一般来说,我们希望在训练初期学习率大一些,使 ...

  2. pytorch优化器学习率调整策略以及正确用法

    优化器 optimzier优化器的作用:优化器就是需要根据网络反向传播的梯度信息来更新网络的参数,以起到降低loss函数计算值的作用. 从优化器的作用出发,要使得优化器能够起作用,需要主要两个东西: ...

  3. pytorch中的学习率与优化器【lr_scheduler与optimizer】

    pytorch中优化器的使用流程大致为: for input, target in dataset:optimizer.zero_grad()output = model(input)loss = l ...

  4. PyTorch的六个学习率调整

    本文截取自<PyTorch 模型训练实用教程>,获取全文pdf请点击:https://github.com/tensor-yu/PyTorch_Tutorial 文章目录 一.pytorc ...

  5. PyTorch学习之六个学习率调整策略

    PyTorch学习率调整策略通过torch.optim.lr_scheduler接口实现.PyTorch提供的学习率调整策略分为三大类,分别是 a. 有序调整:等间隔调整(Step),按需调整学习率( ...

  6. Pytorch —— 学习率调整策略

    1.为什么要调整学习率 学习率控制梯度更新的快慢,在训练中,开始时的学习率比较大,梯度更新步伐比较大,后期时学习率比较小,梯度更新步伐比较小. 梯度下降:wi+1=wi−g(wi)w_{i+1}=w_ ...

  7. Lesson 15.2 学习率调度在PyTorch中的实现方法

    Lesson 15.2 学习率调度在PyTorch中的实现方法   学习率调度作为模型优化的重要方法,也集成在了PyTorch的optim模块中.我们可以通过下述代码将学习率调度模块进行导入. fro ...

  8. pytorch框架自动调整学习率的几种方式

    目录 一.前言 二.Pytorch中自动调整学习率的几种方式  2.1 ExponentialLR-指数衰减方式  2.2 ExponentialLR方式对网络训练的影响  2.3 MultiStep ...

  9. 详细理解pytorch的六种学习率

    深度学习本身是一个不断优化,逼近真实映射函数的过程.而这个过程是需要优化器不断的迭代更新参数,不断降低损失值,这其中最基础也是关键的参数就是学习率.可以说用好学习率策略,准确率至少上升十几个点. 下面 ...

最新文章

  1. Linux Tomcat安装,Linux配置Tomcat,Linux Tomcat修改内存,Linux tomcat修改端口
  2. 曝光 Facebook 内部高效工作 PPT 指南
  3. vfp语言第 代计算机语言,VFP语言属于第()代计算机语言。A、一B、二C、三D、四...
  4. Android中点击事件的四种写法
  5. 基于KVM的虚拟化研究及应用
  6. python输入多个数字 找出只出现一个的数字_在python数组中找到接近给定数字的多个值...
  7. rocketMq 顺序消费
  8. 四款机型全面开售 海蓝色iPhone 12 Pro最受欢迎
  9. uni app input添加获取验证码按钮_FILEX | 如何在UniSwap挖到UNI?
  10. ‘chromedriver.exe‘ executable needs to be in PATH.解决办法
  11. C#读取所有PC中所有进程
  12. 借鸡生蛋术–砍价小程序的推广变现教学
  13. 计算机造句英语,电子计算机造句_造句大全
  14. stm32 hal 模拟i2c
  15. iWatermark Pro for Mac(水印制作软件)
  16. 2017科协青少年科技中心--中央电教馆(与科技相关的比赛)
  17. 大恒相机标定with MATLAB
  18. 目标检测-SSD算法详细总结
  19. Graph Neural Networks: A Review of Methods and Applications(图神经网络:方法与应用综述)
  20. IDEA打包下载超时(已经配置阿里私服,去中央私服下载)

热门文章

  1. 新零售:以消费者为中心的泛零售形态
  2. 终结研发业务的永恒互怼,我们做了这个需求漏斗
  3. 爬虫bs4与xpath
  4. 忍耐是人格品质的至高境界
  5. notablilty笔记本模板_iPad 笔记软件选择 Notability 还是 Goodnotes?
  6. 51单片机自锁(一直正在连接单片机)
  7. Bootstrap 组件 Breadcrumb(面包屑)
  8. 智能扫地机器人哪个牌子好?
  9. jQuery侧边栏手风琴菜单效果(1+X Web前端开发初级 例题)
  10. c++语言运算符,C++关系运算符(超详细)