在神经网络优化器中,主要为了优化我们的神经网络,使神经网络在我们的训练过程中快起来,节省时间。在pytorch中提供了 torch.optim方法优化我们的神经网络,torch.optim 是实现各种优化算法的包。最常用的方法都已经支持,接口很常规,所以以后也可以很容易地集成更复杂的方法。

SGD就是optim中的一个算法(优化器):随机梯度下降算法

    要使用torch.optim,你必须构造一个optimizer对象,这个对象能保存当前的参数状态并且基于计算梯度进行更新。

构建一个优化器

    要构造一个优化器,你必须给他一个包含参数(必须都是variable对象)进行优化,然后可以指定optimizer的参数选项,比如学习率,权重衰减。具体参考torch.optim文档。

optimizer = optim.SGD(model.parameters(),lr=1e-2, momentum=0.9, weight_decay=0.0005)
optimizer.zero_grad()

参数

1、model.parameters()是获取model网络的参数,构建好神经网络后,网络的参数都保存在parameters()函数当中。params (iterable) – 待优化参数的iterable(w和b的迭代) 或者是定义了参数组的dict
2、lr (float) – 学习率
3、momentum (float, 可选) – 动量因子(默认:0)
4、weight_decay (float, 可选) – 权重衰减(L2惩罚)(默认:0)
5、dampening (float, 可选) – 动量的抑制因子(默认:0)
6、nesterov (bool, 可选) – 使用Nesterov动量(默认:False)

learning rate

1、学习率较小时,收敛到极值的速度较慢。
2、学习率较大时,容易在搜索过程中发生震荡。

weight decay

为了有效限制模型中的自由参数数量以避免过度拟合,可以调整成本函数。
一个简单的方法是通过在权重上引入零均值高斯先验值,这相当于将代价函数改变为E〜(w)= E(w)+λ2w2。
在实践中,这会惩罚较大的权重,并有效地限制模型中的自由度。
正则化参数λ决定了如何将原始成本E与大权重惩罚进行折衷。

learning rate decay

1、decay越小,学习率衰减地越慢,当decay = 0时,学习率保持不变。
2、decay越大,学习率衰减地越快,当decay = 1时,学习率衰减最快。

momentum

“冲量”这个概念源自于物理中的力学,表示力对时间的积累效应。

在普通的情况下x的更新 在加上冲量后就是在普通的情况下加上上次更新的x的与mom[0,1]的乘积

当本次梯度下降- dx * lr的方向与上次更新量v的方向相同时,上次的更新量能够对本次的搜索起到一个正向加速的作用。当本次梯度下降- dx * lr的方向与上次更新量v的方向相反时,上次的更新量能够对本次的搜索起到一个减速的作用。

optimizer.zero_grad()


上图为一个简单的梯度下降示意图。以SGD为例,是算一个batch计算一次梯度,然后进行一次梯度更新。这里梯度值就是对应偏导数的计算结果。显然,我们进行下一次batch梯度计算的时候,前一个batch的梯度计算结果,没有保留的必要了。所以在下一次梯度更新的时候,先使用optimizer.zero_grad把梯度信息设置为0

lose

我们使用loss来定义损失函数,是要确定优化的目标是什么,然后以目标为头,才可以进行链式法则和反向传播。

backward

调用loss.backward方法时候,Pytorch的autograd就会自动沿着计算图反向传播,计算每一个叶子节点的梯度(如果某一个变量是由用户创建的,则它为叶子节点)。使用该方法,可以计算链式法则求导之后计算的结果值。

optimizer.step

optimizer.step用来更新参数,就是图片中下半部分的w和b的参数更新操作。

pytorch优化器: optim.SGD optimizer.zero_grad()相关推荐

  1. Pytorch优化器Optimizer

    优化器Optimizer 什么是优化器 pytorch的优化器:管理并更新模型中可学习参数的值,使得模型输出更接近真实标签 导数:函数在指定坐标轴上的变化率 方向导数:指定方向上的变化率(二元及以上函 ...

  2. Pytorch —— 优化器Optimizer(二)

    1.learning rate学习率 梯度下降:wi+1=wi−LR∗g(wi)w_{i+1}=w_{i}-LR*g\left(w_{i}\right)wi+1​=wi​−LR∗g(wi​)梯度是沿着 ...

  3. PyTorch基础(三)-----神经网络包nn和优化器optim

    前言 torch.nn是专门为神经网络设计的模块化接口.nn构建于Autograd之上,可用来定义和运行神经网络.这里我们主要介绍几个一些常用的类. 约定:torch.nn 我们为了方便使用,会为他设 ...

  4. Pytorch优化器全总结(一)SGD、ASGD、Rprop、Adagrad

    目录 写在前面 一. torch.optim.SGD 随机梯度下降 SGD代码 SGD算法解析 1.MBGD(Mini-batch Gradient Descent)小批量梯度下降法 2.Moment ...

  5. pytorch优化器与学习率设置详解

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者 | 小新 来源 | https://a.3durl.cn/Yr ...

  6. Pytorch:优化器

    4.2 优化器 PyTorch将深度学习中常用的优化方法全部封装在torch.optim中,其设计十分灵活,能够很方便的扩展成自定义的优化方法. 所有的优化方法都是继承基类optim.Optimize ...

  7. 优化器:torch.optimizer

    优化器:对参数进行调整,降低误差减小损失 torch.optimizer parameters(模型参数),lr(float)–>(学习速率) 代码: import torch import t ...

  8. Pytorch优化器全总结(三)牛顿法、BFGS、L-BFGS 含代码

    目录 写在前面 一.牛顿法 1.看图理解牛顿法 2.公式推导-三角函数 3.公式推导-二阶泰勒展开 二.BFGS公式推导 三.L-BFGS 四.算法迭代过程 五.代码实现 1.torch.optim. ...

  9. Pytorch优化器全总结(四)常用优化器性能对比 含代码

    目录 写在前面 一.优化器介绍 1.SGD+Momentum 2.Adagrad 3.Adadelta 4.RMSprop 5.Adam 6.Adamax 7.AdaW 8.L-BFGS 二.优化器对 ...

最新文章

  1. Powershell管理系列(五)修改AD账号属性
  2. 运维企业专题(1)HTTP加速器——Varnish缓存机制前篇
  3. windows系统如何添加ssh key到github
  4. 内存数据库MemSQL ——基于内存,MVCC+哈希表、跳表
  5. 2021宁夏高考成绩查询电话,2021宁夏高考成绩什么时候几点可以查
  6. boost::proto::switch_相关的测试程序
  7. dnse 2.0音效厉害还是full sound厉害点呢?谢谢!!
  8. HTML 学习笔记 day one
  9. MVC教程第五篇:MVC整合Ajax
  10. python核心编程:第六章。
  11. Microsoft.System.Center.Operations.Manager.2007 中文版完整光盘下载地址
  12. 94. Binary Tree Inorder Traversal
  13. Jquery通过ajax加载json,jquery ajax json 异步加载数据
  14. 全网首发:LINUX OpenCV编译java/jar版本注意事项
  15. JavaWeb:tomcat知识以及遇到的一些小问题
  16. 无锁环形缓存器RingBuffer的原理
  17. 沭阳学爬虫03爬虫基本原理
  18. JAVA对接短信通知接口
  19. 使用Git时,Failed to connect to github.com port 443 after 21100 ms: Timed out
  20. 好用的IPv6归属地 API

热门文章

  1. 代征地税计算机代码a,国税申报地税附加税时,计算机代码填错了怎么办
  2. 数据库:group by 的使用
  3. Nature:Hinton、LeCun、Bengio图灵奖得主权威科普深度学习
  4. 2018滴滴Web前端实习生面经
  5. mysql8.0.23解压版安装、开启远程登陆(用户创建和授权)以及卸载
  6. 东软UniEAP Workflow案例---国家电网公司: 电力营销业务应用系统
  7. 原装正品韩国GENICOM 紫外线探测器-GUVx-T1xGC-I8LW5.1 原厂渠道
  8. 用vb思设计Java编译器_一个简单的VB-VC编译器 - 程序设计(Programming)版 - 北大未名BBS...
  9. 全球未来网络发展白皮书--笔记
  10. python中input的意思_python中input指的是什么意思