Pytorch基础(十)——优化器(SGD,Adagrad,RMSprop,Adam,LBFGS等)

一、概念

Pytorch中优化器的目的:将损失函数计算出的差值Loss减小。
优化过程:优化器计算网络参数的梯度,然后使用一定的算法策略来对参数进行计算,用新的参数来重新进行训练,最终降低Loss。
其中官网提供了13种优化算法,其中主要的有5种:SGD(stochastic gradient descent 随机梯度下降),Adagrad(自适应梯度算法),Adam(Adaptive Moment Estimation 自适应矩估计),RMSprop(Root Mean Square Prop 均方根),LBFGS(Limited-memory Broyden–Fletcher–Goldfarb–Shanno 有限内存中进行BFGS算法),其他均为改进算法,比如Adadelta是Adagrad的改进算法。
其中还有很多算法细节可能后续会慢慢补充。

二、介绍和示例

2.1 SGD算法

SGD算法可实现随机梯度下降(可选动量)。
torch.optim.SGD(params, lr=, momentum=0, dampening=0, weight_decay=0, nesterov=False)
params:可迭代参数以优化或定义参数组。
lr:初始学习率,可随着训练过程不断调整学习率。
momentum:动量,通常设置为0.9,0.8。momentum又称为动量梯度下降。
dampening:动量阻尼,默认为0。
weight_decay:权值衰减系数,即L2正则化。
nesterov:启用牛顿动量。Nesterov是Momentum的变种,就是梯度的计算方法有所不同,先用当前的速度v更新一遍权重θ,然后用更新参数p计算梯度g。
动量法:
在这里插入图片描述
nesterov:
在这里插入图片描述

learning_rate = 1e-2
optim = torch.optim.SGD(wzh.parameters(), lr=learning_rate, momentum=0.9, weight_decay=1e-2)# 优化器调优
optim.zero_grad()
loss.backward()
optim.step()

2.2、Adagrad

Adagrad算法可以自适应的给所有的参数分配学习率,学习率的大小与梯度的大小成反比。
torch.optim.Adagrad(params, lr=0.01, lr_decay=0, weight_decay=0, initial_accumulator_value=0, eps=1e-10)
lr_decay:学习率衰减因子,默认为0。
eps :将其添加到分母以提高数值稳定性,默认值为1e-10,其主要的作用是避免分母为0.
在这里插入图片描述

optim1 = torch.optim.Adagrad(wzh.parameters(), lr=learning_rate, lr_decay=0, weight_decay=0.01,initial_accumulator_value=0, eps=1e-10)

2.3 RMSprop

RMSprop算法是Adagrad的改进形式,特点是使用指数衰减滑动平均来更新梯度平方,以避免Adagrad累计梯度平方导致学习率过小的缺点。
torch.optim.RMSprop(params, lr=0.01, alpha=0.99, eps=1e-08, weight_decay=0, momentum=0, centered=False)
alpha:平滑常数,默认为0.99。
centered:如果为真,计算中心 RMSProp,梯度通过其方差的估计进行归一化。
在这里插入图片描述

由官网给出的公式可以看出,用α的值来更新梯度平方。

optim2 = torch.optim.RMSprop(wzh.parameters(), lr=learning_rate, alpha=0.99, eps=1e-8, weight_decay=0.01,momentum=0, centered=False)

2.4 Adam

Adam算法结合了RMSProp和Momentum的算法思路,由公式可以看出,分别用m和v两个动量来对梯度进行计算,可以说是目前应用相当广泛的优化器算法。
betas:用于计算梯度及其平方的运行平均值的系数,默认值为(0.9, 0.999)。
amsgrad:是否使用论文 On the Convergence of Adam and Beyond 中该算法的 AMSGrad 变体,默认值为false。
在这里插入图片描述

optim3 = torch.optim.Adam(wzh.parameters(), lr=learning_rate, betas=(0.9, 0.999), eps=1e-8, weight_decay=0.01,amsgrad=False)

2.5 LBFGS

LBFGS是BFGS四位大佬一起开发的一个算法,可以有效节省系统内存,缩小BFGS算法迭代产生的n维D矩阵,只保留部分步数。
pytorch中也可以使用改算法,但需要注意:
1:此优化器不支持每个参数选项和参数组(只能有一个)。
2:现在所有参数都必须在一个设备上。
3:这是一个非常占用内存的优化器(它需要额外的 param_bytes * (history_size + 1) 字节)。 如果它不适合内存尝试减少历史记录大小,或使用不同的算法。
torch.optim.LBFGS(params, lr=1, max_iter=20, max_eval=None, tolerance_grad=1e-07, tolerance_change=1e-09, history_size=100, line_search_fn=None)
max_iter:每个优化步骤的最大迭代次数,默认值20。
max_eval:每个优化步骤的最大函数评估次数,默认值max_iter * 1.25.
tolerance_grad:一阶最优性的终止容限,默认值1e-5。
tolerance_change:函数值/参数更改的终止容差,默认值1e-9。
history_size:更新历史大小 。
line_search_fn:“strong_wolfe”或“None” 。
详细原理部分可见:
一文读懂L-BFGS算法

optim3 = torch.optim.LBFGS(wzh.parameters(), lr=1, max_iter=20, max_eval=None, tolerance_grad=1e-07, tolerance_change=1e-09, history_size=100, line_search_fn=None)

三、参考文章

通俗易懂理解(梯度下降)优化算法:Momentum、AdaGrad、RMSProp、Adam

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/256175.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[PyCharm]unindent does not match any outer indentation level解决方法

转载:https://www.jianshu.com/p/b34f30717eb2 问题出现原因 1、代码前后缩进量不一致 2、tab和space混用(如果一段代码既使用space又使用tab进行缩进,会发生错误,这个时候PyCharm会自动进行判断,根据设置的预先缩进…

数据结构(复习)--------关于平衡二叉树(转载)

在上一个专题中,我们在谈论二叉查找树的效率的时候。不同结构的二叉查找树,查找效率有很大的不同(单支树结构的查找效率退化成了顺序查找)。如何解决这个问题呢?关键在于如何最大限度的减小树的深度。正是基于这个想法…

天猫双11凭什么达到1682亿?这些支撑技术或许可以告诉你

历年「双 11」都会掀起一股买买买的购物热潮 阿里巴巴将这个原本普通的日子赋予了非凡的意义 今年,天猫以 1682 亿的成交额再破记录 而在这一系列疯狂“秒杀”动作的背后 有一个叫云化架构的技术体系支撑着十几亿人的消费狂欢 12 月 8 日 ArchSummit 阿里技术专场 来…

keil5中文乱码的解决

keil5 复制出来的中文显示乱码,该如何解决? 点击Edit - Configuration ,进入编辑器设置: 点击ok ,就可以了转载于:https://www.cnblogs.com/alan666/p/8312100.html

【图像处理】——Python实现几何变换(自定义+opencv库)

理论知识:参考https://blog.csdn.net/on2way/article/details/40460675 Python调用opencv函数参考:https://blog.csdn.net/on2way/article/details/46801063 一、引自《数字图像处理》的基础知识汇总 这个很重要!!!这里需要注意的是反向映射和前向映射的区别,反…

spark2.0.1 安装配置

1. 官网下载 wget http://d3kbcqa49mib13.cloudfront.net/spark-2.0.1-bin-hadoop2.7.tgz 2. 解压 tar -zxvf spark-2.0.1-bin-hadoop2.7.tgz ln -s spark-2.0.1-bin-hadoop2.7 spark2 3. 环境变量 vi /etc/profile #Spark 2.0.1export SPARK_HOME/usr/local/spark2export PATH…

python实战===如何优雅的打飞机

这是一个打飞机的游戏,结构如下: 其中images中包含的素材为 命名为alien.png 命名为ship.png 游戏效果运行是这样的: 敌军,也就是体型稍微大点的,在上方左右移动,并且有规律向下移动。我军目标,…

【图像处理】——Python实现灰度特征提取

目录 1、灰度特征 2、Python代码 1、灰度特征 2、Python代码 import cv2 import numpy as npdef gray_features(img):hist = cv2.calcHist([img],[0],None,[256],[0,255])#得到全局直方图统计数据

前端lvs访问多台nginx代理服务时出现404错误的处理

前端lvs访问多台nginx代理服务时出现404错误的处理 环境描述:app --> lvs --> nginx --> server app访问页面购买流量页面(nginx服务器)代理到后端和服务器交互(多台server)刚开始访问没有问题,流量变大为了避免出现问题,nginx配置了…

iptables四个表与五个链间的处理关系

转载自:http://www.linuxidc.com/Linux/2012-08/67505.htm netfilter/iptables IP 信息包过滤系统是一种功能强大的工具,可用于添加、编辑和除去规则,这些规则是在做信息包过滤决定时,防火墙所遵循和组成的规则。 这些规则存储在专…

C++总结笔记(八)—— 菱形继承

文章目录一、基本概念二、程序举例1. 虚继承2. 内在逻辑一、基本概念 菱形继承是指存在两个子类继承自同一个基类,同时有子类继承这两个子类。 二、程序举例 1. 虚继承 使用虚继承可以解决菱形继承资源浪费的问题,因为有两个子类继承基类&#xff0c…

InnoDB引擎与MyIASM的一点总结

InnoDB引擎: 提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别 提供了行级锁和外键约束。 它的设计的目标是处理大容量数据库系统,用于缓冲数据和索引。 不支持FULLTEXT类型的数据,没有保存表的行数,当s…

C++总结笔记(九)—— 多态

文章目录一、多态是什么?二、使用步骤2.1. 静态多态2.1.1 函数重载2.1.2 模板2.2.动态多态2.2.1 示例2.2.2 原理分析总结一、多态是什么? 多态是面向对象的语言中都必须掌握的特性,其概念简单讲就是对同一种特性的方法有不同的实现功能&…

组件局域网中的无集线器、Windows XP、Windows 7、Windows 8的对等网

为什么要用对等网? 答:对等网采用分散管理的方式,网络中的每台计算机既作为客户机又可作为服务器来工作,每个用户都管理自己机器上的资源。 组建局域网中无集线器的对等网 组建局域网中Windows XP的对等网 组建局域网中Windows 7的…

阿里巴巴将赴NIPS 2017 3大事业部联袂展示AI全技能

被誉为国际顶级的机器学习和神经网络学术会议NIPS 2017将于12月4日-9日在美国加州长滩市举行。在本届会议上,阿里巴巴除有两篇论文入选Workshop并进行Oral和Poster形式报告外,3大技术事业部将连续3天(5日-7日)在阿里展区举行多场技…

360安全卫士加速球误关闭某个应用软件

近期因为工作原因须要使用金山快盘。但因为之前电脑上安装了360安全卫士,在使用加速球功能的时候,会出现,误关闭金山快盘的操作,怎么避免呢? 1、打开360主界面。找到安全防护中心,例如以下图: 2…

20145238-荆玉茗 《信息安全系统设计基础》第7周学习总结

20145238 《信息安全系统设计基础》第7周学习总结 教材学习内容总结 存储器系统 : 存储器系统是一个具有不同容量、成本和访问时间的存储设备的层次结构。 1、RAM随机访问存储器 分类:SRAM(静态)、DRAM(动态)特点&…

关于两个jar包中存在包名和类名都完全相同的jar包冲突问题

2019独角兽企业重金招聘Python工程师标准>>> 最近弄webservice&#xff0c;我使用的jdk自带的wsimport工具来生成客户端代码&#xff0c;发现生成的代码具有编译错误&#xff0c;错误描述如下&#xff1a; The method getPort(QName, Class<T>) in the type S…

const和define 区别

1&#xff1a; 编译器处理不同 define宏是在预处理阶段展开&#xff0c;const常量是编译运行阶段使用。 2&#xff1a;类型和安全检查不同 const常量有数据类型&#xff0c;而宏常量没有数据类型&#xff0c;仅仅是展开。编译器可以对前者进行类型安全检查&#xff0c;而对后者…

【项目实战】——Python打包正装换底色代码为exe文件(可在其他无Python环境下运行)

目录 1.安装pyinstaller 2.生成.exe文件 方法1&#xff1a; 方法2&#xff1a; 方法3&#xff1a; &#xff08;1&#xff09;使用命令行窗口进入项目的根目录 &#xff08;2&#xff09;在改目录下执行pyi-makespec main.py&#xff08;main.py是你的主入口文件&#x…