当前位置: 首页 > news >正文

pytorch技巧总结1:学习率调整方法

pytorch技巧总结1:学习率调整方法

前言

​ 这个系列,我会把一些我觉得有用、有趣的关于pytorch的小技巧进行总结,希望可以帮助到有需要的朋友。

免责申明

​ 本人水平有限,若有误写、漏写,请大家温柔的批评指正。

目录结构

文章目录

    • pytorch技巧总结1:学习率调整方法
      • 1. 用处
      • 2. 通过epoch次数和优化器来调节
        • 2.1 思路来源
        • 2.2 调整案例
      • 3. pytorch提供的方法
        • 3.1 方法介绍
        • 3.2 调整案例
      • 4. 保存参数后再次训练
        • 4.1 思路
        • 4.2 调整案例
      • 5. 总结

1. 用处

​ 学习率的调整在深度学习中是很重要的一块。而身为一个初学者,肯定会进行一些经典架构的代码复现,因此必定会涉及到如何实现论文中所说的“学习率调整”(一般通常是训练到一定程度,学习率除以10)

​ 因此,本篇文章就是简单的总结一些我目前见过的学习率调整方法。

2. 通过epoch次数和优化器来调节

2.1 思路来源

​ 首先介绍的第一个方法,是比较常用的方法,即通过epoch的次数和优化器来调节。

​ 主要流程为:

1. 开始训练
2. 当训练到指定epoch时,调整学习率
3. 继续训练

​ 其中的优化器指的就是我们所认知的“Adam、SGD”等优化器。

​ 这里主要利用的是这些优化器有一个参数名为param_groups,打印该参数值如下:

print(optim_G.param_groups)

​ 打印的值如下:

[{'params': [Parameter containing:......(这些是具体的参数值)], 'lr': 0.002, 'betas': (0.5, 0.999), 'eps': 1e-08, 'weight_decay': 0, 'amsgrad': False, 'maximize': False, 'foreach': None, 'capturable': False, 'differentiable': False, 'fused': False}]

​ 可以从上面看出,这是一个列表,里面包含了一个字典,这个字典里面有我们需要的学习率参数,即上面的lr

​ 因此,我们需要获取它,然后改变它,即可完成学习率的调整。

2.2 调整案例

​ 根据上面的想法,我下面给出调整学习率的一个模板,大家使用的时候按照这个模板即可:

......
# 开始训练
for e in range(epoch):# 50 这些数字根据自己的需求修改即可if e+1 == 50:  # 如果训练到第50个批次,那么可以调整学习率# 调整学习率# 首先,获取列表中第一个字典,然后获取学习率参数# 最后,将这个学习率除以10(或者改为你需要的学习率即可)optim.param_groups[0]['lr'] /= 10 .....  # 具体的训练代码

3. pytorch提供的方法

​ 上面的思路是我们根据优化器参数来实现的,而pytroch官方肯定是知道学习率调整的重要性的,因此他们也提供了方便快捷实现学习率调整的方法。

3.1 方法介绍

​ 方法名字和位置:

torch.optim.lr_scheduler.MultiStepLR

​ 该方法的重要参数介绍:

参数名字意义
optimizer优化器对象
milestones一个数组,比如[50,80,100],表示第50、80、100批次的时候会自动调整学习率
gamma指定倍率,比如0.1,表示后面调整学习率的时候自动乘以0.1(即除以10)

​ 其实,这个方法的调整思路和我们上面第一个方法是一样的,不过,这里实现更加方便。

3.2 调整案例

​ 同样的,下面我给出一个该方法的使用模板,大家根据需求修改即可:

....
optim = .... # 定义优化器‘
# 创建学习率调整器
scheduler = torch.optim.lr_scheduler.MultiStepLR(optim,milestones=[50,75,100],gamma=0.1)
# 开始训练
for e in range(epoch):.... # 正常的训练过程# 只是需要记住的是,一般在epoch训练完成后,在最后加上学习率更新的代码scheduler.step()....

值得一提的是,pytorch提供的调整学习函数不只MultiStepLR,还有一些其它的,不过用法都类似,如果大家有需求,可以看看官方源码的介绍你即可

4. 保存参数后再次训练

4.1 思路

​ 这个方法不是很实用,这是我在最开始学习的的时候,对于pytorch的方法不熟悉的时候使用的思路。

​ 即,先指定训练一定的epoch,然后保存模型参数,接着修改模型学习率参数,然后加载刚刚训练完的参数,继续训练。

​ 这个方法的好处就是:当你在训练过程中,发现训练的不好或者哪里有问题,可以直接停止模型的训练,因为你上次训练的参数已经保存了,所以可以大胆的停止训练。

4.2 调整案例

​ 同样给出一个简单的模板:

.....
lr = 0.01
.....
for e in range(epoch):.... # 正常训练
# 训练完毕后,保存模型参数
torch.save(model.state_dict(),path)# 下次训练
# 1. 修改学习率
lr = 0.001
# 2. 加载上次的模型参数
model.load_state_dict(torch.load(path))
# 3. 接着训练
......

5. 总结

​ 上面三种方法,常用的是第二种。当然,偶尔也是用用第一种和第三种。

​ 如果后面我遇到新的调整学习率方法,会及时更新该篇文章的。

相关文章:

pytorch技巧总结1:学习率调整方法

pytorch技巧总结1:学习率调整方法 前言 ​ 这个系列,我会把一些我觉得有用、有趣的关于pytorch的小技巧进行总结,希望可以帮助到有需要的朋友。 免责申明 ​ 本人水平有限,若有误写、漏写,请大家温柔的批评指正。 目录…...

谈谈VPN是什么、类型、使用场景、工作原理

作者:Insist-- 个人主页:insist--个人主页 作者会持续更新网络知识和python基础知识,期待你的关注 前言 本文将讲解VPN是什么、以及它的类型、使用场景、工作原理。 目录 一、VPN是什么? 二、VPN的类型 1、站点对站点VPN 2、…...

windows 下载安装Redis,并配置开机自启动

windows 下载安装Redis,并配置开机自启动 1. 下载 地址:https://github.com/tporadowski/redis/releases Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择,这里我们下载 Redis-x64-xxx.zip压缩包,之后解压 打…...

2. CSS3的新特性

2.1CSS3的现状 ●新增的CSS3特性有兼容性问题, ie9才支持 ●移动端支持优于PC端 ●不断改进中 ●应用相对广泛 ●现阶段主要学习: 新增选择器和盒子模型以及其他特性 CSS3给我们新增了选择器,可以更加便捷,更加自由的选择目标元素: 1.属性选择器 2.结构伪类选择器…...

从零开始训练神经网络

用Keras实现一个简单神经网络 Keras: Keras是由纯python编写的基于theano/tensorflow的深度学习框架。 Keras是一个高层神经网络API,支持快速实验,能够把你的idea迅速转换为结果,如果有如下需 求,可以优先选择Keras&a…...

连接区块链节点的 JavaScript 库 web3.js

文章目录 前言web3.js 介绍web3.js安装web3.js库模块介绍连接区块链节点向区块链网络发送数据查询区块链网络数据 前言 通过前面的文章我们可以知道基于区块链开发一个DApp,而DApp结合了智能合约和用户界面(客户端),那客户端是如…...

js:scroll平滑滚动页面或元素到顶部或底部的方案汇总

目录 1、CSS的scroll-behavior2、Element.scrollTop3、Element.scroll()/Window.scroll()4、Element.scrollBy()/Window.scrollBy()5、Element.scrollTo()/Window.scrollTo()6、Element.scrollIntoView()7、自定义兼容性方案8、参考文章 准备知识: scrollWidth: 是…...

【Docker】Docker的部署含服务和应用、多租环境、Linux内核的详细介绍

前言 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 📕作者简介:热…...

C国演义 [第五章]

第五章 子集题目理解步骤树形结构递归函数递归结束的条件单层逻辑 代码 子集II题目理解步骤树形结构递归函数递归结束的条件单层逻辑 代码 子集 力扣链接 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。…...

Proxy-Reflect使用详解

1 监听对象的操作 2 Proxy类基本使用 3 Proxy常见捕获器 4 Reflect介绍和作用 5 Reflect的基本使用 6 Reflect的receiver Proxy-监听对象属性的操作(ES5) 通过es5的defineProperty来给对象中的某个参数添加修改和获取时的响应式。 单独设置defineProperty是只能一次设置一…...

【Linux后端服务器开发】Shell外壳——命令行解释器

目录 一、Shell外壳概述 二、描述Shell外壳原理的生动例子 三、C语言模拟实现Shell外壳 一、Shell外壳概述 在狭义上 , 我们称Linux操作系统的内核为 Linux 在广义上 , Linux发行版 Linux内核 外壳程序 就比如市面上现在的redhat, centos, ubuntu等等我们耳熟能详的Linux发…...

【无公网IP】在外Windows远程连接MongoDB数据库

文章目录 前言1. 安装数据库2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射2.3 测试随机公网地址远程连接 3. 配置固定TCP端口地址3.1 保留一个固定的公网TCP端口地址3.2 配置固定公网TCP端口地址3.3 测试固定地址公网远程访问 转载自cpolar极点云文章:公网远程…...

mac python3 安装virtualenv

第一步,执行安装virtualenv pip3 install virtualenv 注意:如果出现WARNING: The script virtualenv is installed in ‘/home/local/bin’ which is not on PATH. Consider adding this directory to PATH or, if you prefer to suppress this warning,…...

网络安全(自学笔记)

如果你真的想通过自学的方式入门web安全的话,那建议你看看下面这个学习路线图,具体到每个知识点学多久,怎么学,自学时间共计半年左右,亲测有效(文末有惊喜): 1、Web安全相关概念&am…...

SPSS方差分析

参考文章 导入准备好的数据 选择分析方法 选择参数 选择对比,把组别放入因子框中,把红细胞增加数放进因变量列表 勾选“多项式”,等级取默认“线性” ,继续 接着点击“事后比较”,弹出对话框,勾选“LSD” …...

【Linux】深入理解文件系统

系列文章 收录于【Linux】文件系统 专栏 关于文件描述符与文件重定向的相关内容可以移步 文件描述符与重定向操作。 可以到 浅谈文件原理与操作 了解文件操作的系统接口。 想深入理解文件缓冲区还可以看看文件缓冲区。 目录 系列文章 磁盘 结构介绍 定位数据 抽象管理…...

12.9 专用指令

目录 状态寄存器传送指令 读CPSR 写CPSR 软中断指令 协处理器指令 协处理器数据运算指令 协处理器存储器访问指令 协处理器寄存器传送指令 伪指令 空指令 LDR 指令 伪指令 状态寄存器传送指令 专门用来读写CPSR寄存器的指令 读CPSR MRS R1,CPSR R1 CPSR 写CP…...

Jvm对象回收算法-JVM(九)

上篇文章介绍了jvm运行时候对象进入老年代的场景,以及如何避免频繁fullGC。 Jvm参数设置-JVM(八) 老年代分配担保机制 这个机制的目的是为了提升效率,在minorGC之前,会有三次判断,之后再次minorGC速度会…...

SpringCloud Alibaba微服务分布式架构组件演变

文章目录 1、SpringCloud版本对应1.1 技术选型依据1.2 cloud组件演变: 2、Eureka2.1 Eureka Server : 提供服务注册服务2.2 EurekaClient : 通过注册中心进行访问2.3 Eureka自我保护 3、Eureka、Zookeeper、Consul三个注册中心的异同点3.1 CP…...

【Linux】初步理解操作系统和进程概念

一.认识操作系统 操作系统是一款纯正的 “搞管理” 的文件。 那操作系统为什么要管理文件? “管理” 又是什么? 它是怎么管理的? 为什么? 1.操作系统帮助用户,管理好底层的软硬件资源; 2.为了给用户提供一个…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

<6>-MySQL表的增删查改

目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表&#xf…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

Spring Boot面试题精选汇总

🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...