PyTorch torch.optim.lr_scheduler 学习率设置 调参-- CyclicLR

2023-11-13

torch.optim.lr_scheduler 学习率设置 – CyclicLR

学习率的参数调整是深度学习中一个非常重要的一项,Andrew NG(吴恩达)认为一般如果想调参数,第一个一般就是学习率。

作者初步学习者,有错误直接提出,热烈欢迎,共同学习。(感谢Andrew ng的机器学习和深度学习的入门教程)

【来源: https://pytorch.org/docs/stable/optim.html】

基本内容

CyclicLR循环学习率

这个学习方式是《Cyclical Learning Rates for Training Neural Networks》2017论文中提出;

这篇论文是从学习率的角度来谈怎么训练深度网络的。

提出了一种新的学习率方法,叫cyclical learning rates,简称CLR。和从前的学习率不同,或者固定(fixed)或者单调递减,这是周期性变化。有三个参数,max_lr,base_lr, stepsize,即上下边界和步长。

论文中给出了三个参数的设定办法。方法取名为triangular;stepsize=(样本个数/batchsize)*(2~10)

先将max_lr设置为stepsize同样的值,base_lr为原架构的初始值,然后以此迭代5到10个epoch,画学习率与准确率之间的关系图,找最开始收敛的点和收敛后第一个下降的点,记录下来作为base_lr和max_lr的值。

并将CLR方法做了两个变异,分别是triangular2和exp range。

triangular2:同triangular非常相似,除了在每一迭代周期结束时,学习率差减小一半,即每个周期后学习率差异下降。
exp_range(指数范围):学习率在最大和最小边界内变化,每一个边界值通过一个指数因子下降。
【引用: https://blog.csdn.net/guojingjuan/article/details/53200776】

在这里插入图片描述
哇塞,用三种方法对比,怎么感觉有点厉害啊!
方法一(蓝色 original learning rate):学习率不变
方法二(绿色 exponential): 指数衰减;例如【0.1, 0.001, 0.0001】
方法二(红色 cyclical learning rates):虽然曲折,但是收敛很快,而且准确率也高。

我要用自己的数据集试一试了,两天后再添加结果:
在这里插入图片描述

其余注意事项:
在这里插入图片描述
上图是对两个优化器,以及加不加CLR进行对比
方法一(蓝色 Nesterov+CLR)
方法二(绿色 Adam)
方法二(红色 Adam+CLR)
这里蓝色最好啊,推荐Nesterov Momentum+CLR?默默地改了自己的优化器。

作者论文中的参数设置
在这里插入图片描述
在这里插入图片描述
有BN的CLR更好,嗯哼!!

使用案例 torch

#设置优化器
optimizer = torch.optim.SGD(model.parameters(), lr=opt.lr, momentum=0.9)

base_lr = 1e-4
max_lr =  5e-4


#设置 学习率调节方法
scheduler = torch.optim.lr_scheduler.CyclicLR(optimizer, base_lr, max_lr, step_size_up=500, step_size_down=500, 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)

for epoch in range( opt.num_epochs ):
	train(...)
	validate(...)
	scheduler.step()
项目 Value
base_lr 基础学习率
max_lr 学习率的上限
step_size_up 学习率上升的步数
step_size_down 学习率下降的步数
mode 三种模式:triangular,triangular2和exp_range,和之前的几个参数交互所用,如果scale_fn不是None则忽略
gamma exp_range中的常量gamma**(cycle iterations)
scale_fn 自定义的缩放策略保证所有x>=0的情况下scale_fn(x)的值域是[0,1]
scale_mode :两种模式cycle和iterations决定scale_fn函数以何种方式作用
cycle_momentum 如果为True,则动量与’base_momentum’和’max_momentum之间的学习率成反比
base_momentum 初始动量,即每个参数组的循环中的下边界。
max_momentum 每个参数组的循环中的上动量边界。 在功能上,它定义了循环幅度(max_momentum - base_momentum)。 任何周期的动量都是max_momentum和幅度的一些比例的差异; 因此,实际上可能无法达到base_momentum,具体取决于缩放功能。

原文链接:https://blog.csdn.net/GrayOnDream/article/details/98518970

相关内容

该论文作者是Leslie N. Smith;实验室:U.S. Naval Research Laboratory (https://www.nrl.navy.mil/ , 可以翻墙的可以去看看,我腿短,翻不过去 /(ㄒoㄒ)/~~)

在这里插入图片描述

作者PHD(1976 – 1979):University of Illinois at Urbana-Champaign;传说中的博士后? Post DoctoralQuantum Chemistry(1979 – 1980): Princeton University;看起来有一定’历史’地位了。_ linkin的链接甩给你们: https://www.linkedin.com/in/drlesliensmith

美国海军研究实验室(NRL)是美国海军和美国海军陆战队的企业研究实验室,从事基础科学研究,应用研究,技术开发和原型制作。 实验室的专业包括等离子体物理,空间物理,材料科学和战术电子战。(传说中的国企??厉害,厉害)

ERROR

这么设置对吗?额(⊙o⊙)…,等我看看结果再更新!

    base_lr = 1e-6
    max_lr =  4e-4
    scheduler = torch.optim.lr_scheduler.CyclicLR(optimizer, base_lr, max_lr, step_size_up=30, step_size_down=30, 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)
ValueError: optimizer must support momentum with `cycle_momentum` option enabled

这里的优化器是adam, 所以cycle_momentum=True, 改为 cycle_momentum=False

scheduler = torch.optim.lr_scheduler.CyclicLR(optimizer, base_lr, max_lr, step_size_up=30, step_size_down=30, 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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PyTorch torch.optim.lr_scheduler 学习率设置 调参-- CyclicLR 的相关文章

  • sklearn 估计器管道的参数无效

    我正在实现 O Reilly 书中的一个示例 Python 机器学习简介 使用 Python 2 7 和 sklearn 0 16 我正在使用的代码 pipe make pipeline TfidfVectorizer LogisticRe
  • 为什么 Python 在导入脚本时只保存脚本的字节码?

    既然执行Python字节码会比运行原始源代码更快 因为Python不需要重新编译 为什么Python在导入脚本时只保存编译后的字节码呢 为每个执行的脚本保存 pyc 文件不是更好吗 无论如何 Python 解释器的启动时间都需要时间 即使您
  • str.translate 与 str.replace - 何时使用哪一个?

    何时以及为什么使用前者而不是后者 反之亦然 目前尚不完全清楚为什么有些人使用前者以及为什么有些人使用后者 它们有不同的目的 translate只能用任意字符串替换单个字符 但一次调用可以执行多次替换 它的参数是一个特殊的表 它将单个字符映射
  • Python 转换矩阵

    我有一个如下所示的列表 2 1 3 1 2 3 1 2 2 2 我想要的是一个转换矩阵 它向我显示如下序列 1 后跟 1 的频率是多少 1 后面跟着 2 的频率是多少 1 后跟 3 的频率是多少 2 后跟 1 的频率是多少 2 后跟 2 的
  • Flask 中“缺少 CSRF 令牌”,但它在模板中呈现

    问题 当我尝试登录 使用 Flask login 时 我得到Bad Request The CSRF session token is missing但令牌正在呈现 在模板中 secret key 已设置 并且我在本地运行localhost
  • Matplotlib 图例,跨列添加项目而不是向下添加项目

    对于下面的简单绘图 有没有办法让 matplotlib 填充图例 以便它从左到右填充行 而不是第一列然后第二列 gt gt gt from pylab import gt gt gt x arange 2 pi 2 pi 0 1 gt gt
  • django 模板 - 如何动态访问变量?

    假设我有一个具有以下上下文的 django 模板 data1 this is data1 data2 this is data2 data name data2 现在我知道了data name 假设它是 data2 是否可以用它来访问变量d
  • 带有 mkdocs 的本地 mathjax

    我想在无法访问互联网的计算机上使用 MathJax 和 Mkdocs 因此我不能只调用 Mathjax CDN Config mkdocs yml site name My Docs extra javascript javascripts
  • 在linux上安装python ssl模块,无需重新编译

    是否可以在已经安装了 OpenSSL 的 Linux 机器上安装 python 的 SSL 模块 而无需重新编译 python 我希望它就像复制几个文件并将它们包含在库路径中一样简单 Python版本是2 4 3 谢谢 是否可以在已经安装了
  • 用 Python 绘制直方图

    我有两个列表 x 和 y x 包含字母表 A Z Y 包含它们在文件中的频率 我尝试研究如何在直方图中绘制这些值 但在理解如何绘制它方面没有成功 n bins patches plt hist x 26 normed 1 facecolor
  • Python - Unicode 到 ASCII 的转换

    我无法在不丢失数据的情况下将以下 Unicode 转换为 ASCII u ABRA xc3O JOS xc9 I tried encode and decode他们不会这么做 有人有建议吗 Unicode 字符u xce0 and u xc
  • 在 Linux 上使用多处理时,TKinter 窗口不会出现

    我想生成另一个进程来异步显示错误消息 同时应用程序的其余部分继续 我正在使用multiprocessingPython 2 6 中的模块来创建进程 我试图用以下命令显示窗口TKinter 这段代码在Windows上运行良好 但在Linux上
  • 在请求中设置端口

    我正在尝试利用cgminer使用 Python 的 API 我对利用requests图书馆 我了解如何做基本的事情requests but cgminer想要更具体一点 我想缩小 import socket import json sock
  • 将 window.location 传递给 Flask url_for

    我正在使用 python 在我的页面上 当匿名用户转到登录页面时 我想将一个变量传递到后端 以便它指示用户来自哪里 发送 URL 因此 当用户单击此锚链接时 a href Sign in a 我想发送用户当前所在页面的当前 URL
  • 为什么将模块级代码放入函数中然后调用该函数在Python中速度更快?

    在亚历克斯 马尔泰利的回应中使 Python 脚本面向对象 https stackoverflow com questions 1813117 making a python script object oriented 他提到在 Pyth
  • 从迭代器外部将 StopIteration 发送到 for 循环

    有几种方法可以打破一些嵌套循环 他们是 1 使用中断 继续 for x in xrange 10 for y in xrange 10 print x y if x y gt 50 break else continue only exec
  • 如何展平解析树并存储在字符串中以进行进一步的字符串操作 python nltk

    我正在尝试从树结构中获取扁平树 如下所示 我想将整个树放在一个字符串中 就像没有检测到坏树错误一样 S NP SBJ NP DT The JJ high JJ seven day PP IN of NP DT the CD 400 NNS
  • Python 相当于 Scala 案例类

    Python 中是否有与 Scala 的 Case Class 等效的东西 就像自动生成分配给字段而无需编写样板的构造函数一样 当前执行此操作的现代方法 从 Python 3 7 开始 是使用数据类 https www python org
  • pandas.read_fwf 忽略提供的数据类型

    我正在从文本文件导入数据框 我想指定列的数据类型 但 pandas 似乎忽略了dtype input 一个工作示例 from io import StringIO import pandas as pd string USAF WBAN S
  • 如何同时接受int和float类型的输入?

    我正在制作一个货币转换器 如何让 python 同时接受整数和浮点数 我就是这样做的 def aud brl amount From to ER 0 42108 if amount int if From strip aud and to

随机推荐

  • chrome同步或登录报错:Request Canceled

    原因 因为某个接口连接失败造成 可以摁快捷键F12或者点击开发者工具 然后选择network 这里面是该页面所有的收发请求 开始登录 登录的时候要注意network中pending或者报错的接口 然后把域名记录下来 解决方式 安装chrom
  • struct与typedef struct的区别

    typedef是类型定义的意思 typedef struct 是为了使用这个结构体方便 具体区别在于 若struct node 这样来定义结构体的话 在申请node 的变量时 需要这样写 struct node n 若用typedef 可以
  • Makefile---只执行第一行指令解决方法

    在Makefile中将1 c 2 c 3 c分别编译为1 o 2 o 3 o 1 o 1 c gcc c 1 c o 1 o 2 o 2 c gcc c 2 c o 2 o 3 o 3 c gcc c 3 c o 3 o 执行make后只会
  • ajax传输base64,如何通过ajax发送大的base64图像字符串?

    我在通过ajax发送base64图像字符串时遇到问题 当我上传小图片时 它工作正常 但是当我尝试上传大图时 它会产生一个错误 其实我正在创建一个在线可定制的打印Web应用程序 因此 用户可以选择添加文字 图像 我想要的是 当用户按提交but
  • 电子信息工程要考研吗?

    考 如果你的大学或者专业非常牛逼 那当我没说 电子信息工程这个专业比较 坑 学的范围广 内容多 什么模电 数电 C 计算机网络 嵌入式 微机原理 通信原理等等都要学 总之 如果四年下来按部就班的下来 觉得什么都知道 说什么都能和别人扯上几句
  • 机器学习——SVM之python实现数据样本标准化和归一化

    目录 一 标准化和归一化的目的 1 标准化 2 归一化 二 标准化和归一化常用的理论公式 1 归一化 2 标准化 三 python实现SVM样本数据标准化和归一化 1 标准化 2 归一化 本文源代码 机器学习 支持向量机SVM之python
  • Python基础知识

    基础知识 基础知识包括输入输出 变量 数据类型 表达式 运算符这5个方面 1 输入输出 Python有很多函数 后面我们会细讲 但这里先将两个最基本的函数 输入和输出 输出函数print 在前面我们已经用过了 语法就是 print 要输出的
  • 前端案例——轮播图的实现(定时切换图片)

    显示效果为 主页图片每三秒更换一次
  • Windows平台安装GDB调试器

    首先我们需要知道GDB 调试器无法直接安装到 Windows 平台上 如果想在 Windows 系统中使用 GDB 调试器 需要一个中间媒介 常用的就是 MinGW MinGw 全称 Minimalist GNU for Windows 作
  • 关于Keil打开未响应卡死的问题

    跟同事经常互传一些keil工程 由于两人之间的keil的版本不一致 他的keil5 我的keil4 导致我给他的keil4工程他能打开 他给我的keil5工程我用keil4打开就卡死 究其原因是跟工程同目录下的 同名 uvopt文件导致的
  • 例说数据结构&STL(十)——hash_set/unordered_set

    1 白话hash set unordered set 这一章节 我们来了解两个新的结构体hash set和unorderd set 我将这两者放在一个博文中介绍是因为它们都属于基于哈希表 hash table 构建的数据结构 并且是关键字与
  • Apache Archiva 任意目录删除(CVE-2022-40309) 和 任意文件读取(CVE-2022-40308)

    声明 出品 先知社区 ID l3yx 以下内容 来自先知社区的l3yx作者原创 由于传播 利用此文所提供的信息而造成的任何直接或间接的后果和损失 均由使用者本人负责 长白山攻防实验室以及文章作者不承担任何责任 CVE 2022 40309
  • Git删除远端最后一次提交

    git log 查看提交历史 找到最后一次提交之前的commit id 执行git reset回退本地代码到正确的代码版本 git reset hard 版本号 如果是回到最后一条的前一条 用 git reset hard HEAD 强制推
  • VR头显Unity下如何实现毫秒级延迟的RTMP或RTSP播放?

    技术背景 虚拟现实 VR 技术的互动性和沉浸感 为我们提供了一种全新的视觉体验 不过 如果需要实现真正的沉浸式体验 VR播放的延迟问题非常重要 好多VR场景下 如果存在延迟 用户在移动头部时可能会感觉到画面反应不及时 导致影响视频的流畅度
  • Android开发--实现Android登录注册页面(下)

    前面我们已经完成了登录注册页面的布局 下面我们实现验证登录和记住密码的功能 我们这里还没用到数据库 所以我们的验证的账号密码 是写死的 首先进入登录页面 可以从这里跳转到注册页面 注册成功后 账号密码的输入框会自动获取刚刚注册的账号密码 无
  • MySQL处理大量数据的一些方法

    一 复刻一张表的数据到另一张表 结构相同 从当前表查询所有数据到快照表 注 快照表只比当前表多一个快照时间字段CKTIME 由于使用框架查询出来之后再插入到快照表会牺牲掉很大性能 所以直接采用sql脚本的方式将数据迁移到快快照表 SQL如下
  • DVWA的安装教程和通关详解

    DVWA的安装教程和通关详解 目录 一 环境搭建 1 下载和安装phpstudy 2 DVWA下载 3 DVWA安装 更改配置信息 解决爆红错误 二 Brute Force 1 LOW级别 2 Medium级别 3 High级别 三 Com
  • 生物统计学

    多元回归与相关 一元回归是因变量Y在一个自变量X上的回归 它仅仅涉及到两个变量的关系问题 多元回归 multiple regress 一个变量 因变量 对其他两个或两个以上变量 自变量 的线性回归关系 若因变量Y同时受到m个自变量X1 X2
  • Linux 快速定位日志 排查bug命令 实用性100%

    当项目中有异常 我么你只知道关键日志 要从服务器上一个老大的日志文件中找到那一行可以使用如下命令 cat app log grep n abc cat app log 打开app log日志文件 管道符 意思是把上一个命令的内容用于下一个命
  • PyTorch torch.optim.lr_scheduler 学习率设置 调参-- CyclicLR

    torch optim lr scheduler 学习率设置 CyclicLR 学习率的参数调整是深度学习中一个非常重要的一项 Andrew NG 吴恩达 认为一般如果想调参数 第一个一般就是学习率 作者初步学习者 有错误直接提出 热烈欢迎