2021-10-24

随着网络训练 iteration 的深入,应该对学习率进行调整,以寄希望找到 Global Minima ,在 PyTorch 中的 torch.optim.lr_scheduler 提供了非常多的学习率调整方法,下面将逐一介绍。

目 录

  1. StepLR
  2. MultiStepLR
  3. ExponentialLR
  4. MultiplicativeLR
  5. CosineAnnealingLR
  6. CosineAnnealingWarmRestarts
  7. CyclicLR
  8. OneCycleLR
  9. ReduceLROnPlateau
  10. StepLR
    torch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma=0.1, last_epoch=-1, verbose=False)

对学习率进行等间隔地调整,调整倍数为 gamma, 调整的 epoch 间隔为 step_size 。

假设某优化器的学习率设置为 0.5

scheduler = StepLR(optimizer, step_size=30, gamma=0.1)

相应的 lr 变化:

lr = 0.05 if epoch < 30

lr = 0.005 if 30 <= epoch < 60

lr = 0.0005 if 60 <= epoch < 90

1
2
3
4
5
6
例如,将 step_size 调整为 10 ,gamma 分别设置为 0.1 和 0.5 , scheduler 中学习率的变化情况:

细心的小伙伴可能会发现在 StepLR 中 step_size 的最后一个 epoch 的学习率会突然往下跌至下下个 step_size 的 learning_rate ,但是这似乎并不影响 optimizer 中的学习率(见下图)…

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

按照 milestones 所设定的 epoch 进行学习率调整,学习率调整倍数为 gamma 。

假设某优化器的学习率设置为 0.5

scheduler = MultiStepLR(optimizer, milestones=[20,60], gamma=0.1)

相应的 lr 变化:

lr = 0.05 if epoch < 20

lr = 0.005 if 20 <= epoch < 60

lr = 0.0005 if epoch >= 60

1
2
3
4
5
6
例如,将 milestones 设置为 [20, 60] ,gamma 分别设置为 0.1 和 0.5 , scheduler 中学习率的变化情况:

同样在 MultiStepLR 中达到 milestones 边界的 epoch 的学习率会突然往下跌至下下个 step_size 的 learning_rate ,但是这似乎也同样并不影响 optimizer 中的学习率(见下图)…

  1. ExponentialLR
    torch.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⋅gamma
epoch

以 optimizer 的 lr = 0.1 ,gamma 设为 0.5 和 0.9 为例,其学习率的变化情况:

  1. MultiplicativeLR
    torch.optim.lr_scheduler.MultiplicativeLR(optimizer, lr_lambda, last_epoch=-1, verbose=False)

有点类似 lambdaLR 和 ExponentialLR 的综合体,使用函数(lambda)返回一个衰减因子,比如设为 lmd 。

更新后的 l r ′ = l r ⋅ l m d lr’ = lr·lmdlr

=lr⋅lmd

以 optimizer 的 lr = 0.1 ,lmd 设为 0.5 和 0.9 为例,其学习率的变化情况:

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

余弦退火,使得学习率按照余弦周期变化。设置每 T_max 个 epoch 迭代后衰减到 eta_min 所设置的最小值,然后逐渐恢复其初值,依此类推、往复波动:

以 optimizer 的 lr = 0.1 ,T_max 设为 20 和 15,eta_min = 0.1 为例,其学习率的变化情况:

  1. CosineAnnealingWarmRestarts
    torch.optim.lr_scheduler.CosineAnnealingWarmRestarts(optimizer, T_0, T_mult=1, eta_min=0, last_epoch=-1, verbose=False)

类似 CosineAnnealingLR,不同的是 CosineAnnealingWarmRestarts 在学习率上升时使用热启动。

其中 T_0 为学习率 restart 的周期,T_mult 为 restart 之后的周期倍数(即 T 0 ′ = T 0 ⋅ T m u l t T_0’=T_0·T_{mult}T
0


=T
0

⋅T
mult

),eta_min 为学习率的最小值(默认为 0 )。

以 optimizer 的 lr = 0.1 ,T_0 设为 10、T_mult 设置为 2、eta_min 设置为 0.05 ,和仅设置 T_0 为 15 为例,其学习率的变化情况:

  1. CyclicLR
    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)

base_lr 为学习率周期内的起始 lr

max_lr 为学习率周期内的 lr 最大值

step_size_up 为学习率增加部分的周期 epoch

step_size_down 为学习率减小部分的周期 epoch

mode 为学习率调整的模式,可选 { triangular (默认), triangular2 , exp_range }

以下方 shceduler 为例:

scheduler = lr_scheduler.CyclicLR(optimizer,base_lr=0.001,max_lr=0.5,step_size_up=20,step_size_down=10)
scheduler1 = lr_scheduler.CyclicLR(optimizer1,base_lr=0.1,max_lr=0.3,step_size_up=20)
1
2
其结果如下图:

  1. OneCycleLR
    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)

先从一个较低的学习率开始,逐渐达到一个峰值,然后再从峰值下降到一个比初始学习率更小的值。

max_lr 为一个 Cycle 中 lr 的最大值

total_steps 为一个 Cycle 的 steps 总和(total_steps = epochs · steps_per_epoch)

epochs 一般是在 total_steps 未指定时,和 steps_per_epoch 共同推出 total_steps

steps_per_epoch 一般是在 total_steps 未指定时,和 epochs 共同推出 total_steps (一般可以指定为 len(DataLoader) ,而 epochs 是自己训练时指定的,如此一来便不用指定 total_steps )

以下方 shceduler 为例:

scheduler = lr_scheduler.OneCycleLR(optimizer,max_lr=0.5,epochs=10,steps_per_epoch=10)
scheduler1 = lr_scheduler.OneCycleLR(optimizer1,max_lr=0.3,total_steps=100)
1
2
其结果为:

  1. ReduceLROnPlateau
    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)

当经过 patience 个 epoch 后,某监测指标依然保持不变时调整学习率(有点类似 early stopping 的思想,但这里选择更改学习率后继续训练而非停止 )

mode 为可选 min 和 max 两种模式,min 表示指标不再降低,max 表示当指标不再升高

factor 为学习率调整倍数,即 new_lr = lr * factor

patience 为可以忍受多少个 epoch 指标可以依然保持不变,当指标保持不变的 epoch 超过 patience 时,则进行调整学习率
————————————————
版权声明:本文为CSDN博主「麻瓜1号」的原创文章,遵循CC 4.0 BY原文链接:https://blog.csdn.net/weixin_48249563/article/details/115031005@TOC

欢迎使用Markdown编辑器

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

新的改变

我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

  1. 全新的界面设计 ,将会带来全新的写作体验;
  2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
  3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
  4. 全新的 KaTeX数学公式 语法;
  5. 增加了支持甘特图的mermaid语法1 功能;
  6. 增加了 多屏幕编辑 Markdown文章功能;
  7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
  8. 增加了 检查列表 功能。

功能快捷键

撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G

合理的创建标题,有助于目录的生成

直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

如何改变文本的样式

强调文本 强调文本

加粗文本 加粗文本

标记文本

删除文本

引用文本

H2O is是液体。

210 运算结果是 1024.

插入链接与图片

链接: link.

图片: Alt

带尺寸的图片: Alt

居中的图片: Alt

居中并且带尺寸的图片: Alt

当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

如何插入一段漂亮的代码片

博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

// An highlighted block
var foo = 'bar';

生成一个适合你的列表

  • 项目
    • 项目
      • 项目
  1. 项目1
  2. 项目2
  3. 项目3
  • 计划任务
  • 完成任务

创建一个表格

一个简单的表格是这么创建的:

项目Value
电脑$1600
手机$12
导管$1

设定内容居中、居左、居右

使用:---------:居中
使用:----------居左
使用----------:居右

第一列第二列第三列
第一列文本居中第二列文本居右第三列文本居左

SmartyPants

SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

TYPEASCIIHTML
Single backticks'Isn't this fun?'‘Isn’t this fun?’
Quotes"Isn't this fun?"“Isn’t this fun?”
Dashes-- is en-dash, --- is em-dash– is en-dash, — is em-dash

创建一个自定义列表

Markdown
Text-to- HTML conversion tool
Authors
John
Luke

如何创建一个注脚

一个具有注脚的文本。2

注释也是必不可少的

Markdown将文本转换为 HTML

KaTeX数学公式

您可以使用渲染LaTeX数学表达式 KaTeX:

Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n1)!nN 是通过欧拉积分

Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t   . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=0tz1etdt.

你可以找到更多关于的信息 LaTeX 数学表达式here.

新的甘特图功能,丰富你的文章

Mon 06 Mon 13 Mon 20 已完成 进行中 计划一 计划二 现有任务 Adding GANTT diagram functionality to mermaid
  • 关于 甘特图 语法,参考 这儿,

UML 图表

可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:

张三 李四 王五 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 李四想了很长时间, 文字太长了 不适合放在一行. 打量着王五... 很好... 王五, 你怎么样? 张三 李四 王五

这将产生一个流程图。:

链接
长方形
圆角长方形
菱形
  • 关于 Mermaid 语法,参考 这儿,

FLowchart流程图

我们依旧会支持flowchart的流程图:

Created with Raphaël 2.3.0 开始 我的操作 确认? 结束 yes no
  • 关于 Flowchart流程图 语法,参考 这儿.

导出与导入

导出

如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

导入

如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。


  1. mermaid语法说明 ↩︎

  2. 注脚的解释 ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值