本文截取自《PyTorch 模型训练实用教程》,获取全文pdf请点击:https://github.com/tensor-yu/PyTorch_Tutorial

文章目录

  • 1 torch.optim.SGD
  • 2 torch.optim.ASGD
  • 3 torch.optim.Rprop
  • 4 torch.optim.Adagrad
  • 5 torch.optim.Adadelta
  • 6 torch.optim.RMSprop
  • 7 torch.optim.Adam(AMSGrad)
  • 8 torch.optim.Adamax
  • 9 torch.optim.SparseAdam
  • 10 torch.optim.LBFGS

PyTorch提供了十种优化器,在这里就看看都有哪些优化器。

1 torch.optim.SGD

class torch.optim.SGD(params, lr=, momentum=0, dampening=0, weight_decay=0, nesterov=False)
功能:
可实现SGD优化算法,带动量SGD优化算法,带NAG(Nesterov accelerated gradient)动量SGD优化算法,并且均可拥有weight_decay项。
参数:
params(iterable)- 参数组(参数组的概念请查看 3.2 优化器基类:Optimizer),优化器要管理的那部分参数。
lr(float)- 初始学习率,可按需随着训练过程不断调整学习率。
momentum(float)- 动量,通常设置为0.9,0.8
dampening(float)- dampening for momentum ,暂时不了其功能,在源码中是这样用的:buf.mul_(momentum).add_(1 - dampening, d_p),值得注意的是,若采用nesterov,dampening必须为 0.
weight_decay(float)- 权值衰减系数,也就是L2正则项的系数
nesterov(bool)- bool选项,是否使用NAG(Nesterov accelerated gradient)

注意事项:
pytroch中使用SGD十分需要注意的是,更新公式与其他框架略有不同!
pytorch中是这样的:
v=ρ∗v+g
p=p−lr∗v = p - lr∗ρ∗v - lr∗g
其他框架:
v=ρ∗v+lr∗g
p=p−v = p - ρ∗v - lr∗g
ρ是动量,v是速率,g是梯度,p是参数,其实差别就是在ρ∗v这一项,pytorch中将此项也乘了一个学习率。

2 torch.optim.ASGD

class torch.optim.ASGD(params, lr=0.01, lambd=0.0001, alpha=0.75, t0=1000000.0, weight_decay=0)
功能:
ASGD也成为SAG,均表示随机平均梯度下降(Averaged Stochastic Gradient Descent),简单地说ASGD就是用空间换时间的一种SGD,详细可参看论文:http://riejohnson.com/rie/stograd_nips.pdf
参数:
params(iterable)- 参数组(参数组的概念请查看 3.1 优化器基类:Optimizer),优化器要优化的那些参数。
lr(float)- 初始学习率,可按需随着训练过程不断调整学习率。
lambd(float)- 衰减项,默认值1e-4。
alpha(float)- power for eta update ,默认值0.75。
t0(float)- point at which to start averaging,默认值1e6。
weight_decay(float)- 权值衰减系数,也就是L2正则项的系数。

3 torch.optim.Rprop

class torch.optim.Rprop(params, lr=0.01, etas=(0.5, 1.2), step_sizes=(1e-06, 50))
功能:
实现Rprop优化方法(弹性反向传播),优化方法原文《Martin Riedmiller und Heinrich Braun: Rprop - A Fast Adaptive Learning Algorithm. Proceedings of the International Symposium on Computer and Information Science VII, 1992》
该优化方法适用于full-batch,不适用于mini-batch,因而在min-batch大行其道的时代里,很少见到。

4 torch.optim.Adagrad

class torch.optim.Adagrad(params, lr=0.01, lr_decay=0, weight_decay=0, initial_accumulator_value=0)
功能:
实现Adagrad优化方法(Adaptive Gradient),Adagrad是一种自适应优化方法,是自适应的为各个参数分配不同的学习率。这个学习率的变化,会受到梯度的大小和迭代次数的影响。梯度越大,学习率越小;梯度越小,学习率越大。缺点是训练后期,学习率过小,因为Adagrad累加之前所有的梯度平方作为分母。
详细公式请阅读:Adaptive Subgradient Methods for Online Learning and Stochastic Optimization
John Duchi, Elad Hazan, Yoram Singer; 12(Jul):2121−2159, 2011.(http://www.jmlr.org/papers/volume12/duchi11a/duchi11a.pdf)

5 torch.optim.Adadelta

class torch.optim.Adadelta(params, lr=1.0, rho=0.9, eps=1e-06, weight_decay=0)
功能:
实现Adadelta优化方法。Adadelta是Adagrad的改进。Adadelta分母中采用距离当前时间点比较近的累计项,这可以避免在训练后期,学习率过小。
详细公式请阅读:https://arxiv.org/pdf/1212.5701.pdf

6 torch.optim.RMSprop

class torch.optim.RMSprop(params, lr=0.01, alpha=0.99, eps=1e-08, weight_decay=0, momentum=0, centered=False)
功能:
实现RMSprop优化方法(Hinton提出),RMS是均方根(root meam square)的意思。RMSprop和Adadelta一样,也是对Adagrad的一种改进。RMSprop采用均方根作为分母,可缓解Adagrad学习率下降较快的问题。并且引入均方根,可以减少摆动,详细了解可读:http://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf

7 torch.optim.Adam(AMSGrad)

class torch.optim.Adam(params, lr=0.001, betas=(0.9, 0.999), eps=1e-08, weight_decay=0, amsgrad=False)
功能:
实现Adam(Adaptive Moment Estimation))优化方法。Adam是一种自适应学习率的优化方法,Adam利用梯度的一阶矩估计和二阶矩估计动态的调整学习率。吴老师课上说过,Adam是结合了Momentum和RMSprop,并进行了偏差修正。
参数:
amsgrad- 是否采用AMSGrad优化方法,asmgrad优化方法是针对Adam的改进,通过添加额外的约束,使学习率始终为正值。(AMSGrad,ICLR-2018 Best-Pper之一,《On the convergence of Adam and Beyond》)。
详细了解Adam可阅读,Adam: A Method for Stochastic Optimization(https://arxiv.org/abs/1412.6980)。

8 torch.optim.Adamax

class torch.optim.Adamax(params, lr=0.002, betas=(0.9, 0.999), eps=1e-08, weight_decay=0)
功能:
实现Adamax优化方法。Adamax是对Adam增加了一个学习率上限的概念,所以也称之为Adamax。
详细了解可阅读,Adam: A Method for Stochastic Optimization(https://arxiv.org/abs/1412.6980)(没错,就是Adam论文中提出了Adamax)。

9 torch.optim.SparseAdam

class torch.optim.SparseAdam(params, lr=0.001, betas=(0.9, 0.999), eps=1e-08)
功能:
针对稀疏张量的一种“阉割版”Adam优化方法。
only moments that show up in the gradient get updated, and only those portions of the gradient get applied to the parameters

10 torch.optim.LBFGS

class torch.optim.LBFGS(params, lr=1, max_iter=20, max_eval=None, tolerance_grad=1e-05, tolerance_change=1e-09, history_size=100, line_search_fn=None)
功能:
实现L-BFGS(Limited-memory Broyden–Fletcher–Goldfarb–Shanno)优化方法。L-BFGS属于拟牛顿算法。L-BFGS是对BFGS的改进,特点就是节省内存。
使用注意事项:
1.This optimizer doesn’t support per-parameter options and parameter groups (there can be only one).
Right now all parameters have to be on a single device. This will be improved in the future.(2018-10-07)


转载请注明出处:https://blog.csdn.net/u011995719/article/details/88988420

PyTorch 学习笔记(七):PyTorch的十个优化器相关推荐

  1. PyTorch学习笔记:PyTorch初体验

    PyTorch学习笔记:PyTorch初体验 一.在Anaconda里安装PyTorch 1.进入虚拟环境mlcc 2.安装PyTorch 二.在PyTorch创建张量 1.启动mlcc环境下的Spy ...

  2. pytorch学习笔记七:nn网络层——池化层、线性层

    一.池化层 池化运算:对信号进行"收集" 并"总结",类似于水池收集水资源,因而得名池化层. 收集:由多变少,图像的尺寸由大变小 总结:最大值/平均值 下面是最 ...

  3. pytorch学习笔记 1. pytorch基础 tensor运算

    pytorch与tensorflow是两个近些年来使用最为广泛的机器学习模块.开个新坑记录博主学习pytorch模块的过程,不定期更新学习进程. 文章较为适合初学者,欢迎对代码和理解指点讨论,下面进入 ...

  4. PyTorch学习笔记(15) ——PyTorch中的contiguous

    本文转载自栩风在知乎上的文章<PyTorch中的contiguous>.我觉得很好,特此转载. 0. 前言 本文讲解了pytorch中contiguous的含义.定义.实现,以及conti ...

  5. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  6. PyTorch学习笔记(七):PyTorch可视化

    PyTorch可视化 往期学习资料推荐: 1.Pytorch实战笔记_GoAI的博客-CSDN博客 2.Pytorch入门教程_GoAI的博客-CSDN博客 本系列目录: PyTorch学习笔记(一) ...

  7. PyTorch学习笔记2:nn.Module、优化器、模型的保存和加载、TensorBoard

    文章目录 一.nn.Module 1.1 nn.Module的调用 1.2 线性回归的实现 二.损失函数 三.优化器 3.1.1 SGD优化器 3.1.2 Adagrad优化器 3.2 分层学习率 3 ...

  8. pytorch adagrad_【学习笔记】Pytorch深度学习—优化器(二)

    点击文末 阅读原文,体验感更好哦! 前面学习过了Pytorch中优化器optimizer的基本属性和方法,优化器optimizer的主要功能是 "管理模型中的可学习参数,并利用参数的梯度gr ...

  9. PyTorch学习笔记(四):PyTorch基础实战

    PyTorch实战:以FashionMNIST时装分类为例: 往期学习资料推荐: 1.Pytorch实战笔记_GoAI的博客-CSDN博客 2.Pytorch入门教程_GoAI的博客-CSDN博客 本 ...

  10. PyTorch学习笔记(三):PyTorch主要组成模块

    往期学习资料推荐: 1.Pytorch实战笔记_GoAI的博客-CSDN博客 2.Pytorch入门教程_GoAI的博客-CSDN博客 本系列目录: PyTorch学习笔记(一):PyTorch环境安 ...

最新文章

  1. 群雄逐鹿,谁将赢得5G时代的物联网战争?
  2. Web Service 概念
  3. 第七章 移动自动化持续化集成(下)
  4. 网络安全技术文章征稿启事
  5. 中石油训练赛 - Match Matching(完全背包)
  6. [渝粤教育] 广东-国家-开放大学 21秋期末考试管理会计10171k2
  7. jquery mobile 从一个html的page跳转到另一个html的page
  8. ConcurrentProgramming:ThreadLocal(jdk8)
  9. 洛谷 P2473 [SCOI2008]奖励关 解题报告
  10. Windows10 开机跳过密码验证
  11. 腾讯云服务器架设mir2
  12. 浅析计算机用户身份识别技术,(浅析身份认证技术.doc
  13. MavLink 库 c++环境搭建及解ADS-B消息教程
  14. RSF 异步访问性能分析报告 - 百兆网卡下的彪悍性能
  15. C语言 | 位域的使用详解
  16. 未转变者2.2.4怎么创建服务器,未转变者2period;2period;4墙怎么做 | 手游网游页游攻略大全...
  17. 什么样的台灯灯光是好的?推荐中性色温的护眼台灯
  18. 聊聊 MyBatis 中的设计模式
  19. director(director)
  20. Axie Infinity 是一个受神奇宝贝启发的宇宙,任何人都可以通过熟练的游戏玩法和对生态系统的贡献来赚取代币

热门文章

  1. Android WebService
  2. hdu-3488-Tour(KM最佳完美匹配)
  3. AS3显示当前帧速率的类:FrameRater Class
  4. osm数据下载 python_用Python解锁处理OSM数据的全部姿势
  5. apache commons collections CollectionUtils工具类简单使用
  6. background:url(./images.png) no-repeat 0 center的用法
  7. centos6.8安装mysql5.5
  8. 51nod 1009 数字1的数量
  9. windows server 2008 - 隐藏磁盘分区 (2)
  10. linux下用户及用户组的管理