PyTorch的Optimizer训练工具的实现


Posted in Python onAugust 18, 2019

torch.optim 是一个实现了各种优化算法的库。大部分常用的方法得到支持,并且接口具备足够的通用性,使得未来能够集成更加复杂的方法。

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

例如:

optimizer = optim.SGD(model.parameters(), lr = 0.01, momentum=0.9)
optimizer = optim.Adam([var1, var2], lr = 0.0001)

构造方法

Optimizer 的 __init__ 函数接收两个参数:第一个是需要被优化的参数,其形式必须是 Tensor 或者 dict;第二个是优化选项,包括学习率、衰减率等。

被优化的参数一般是 model.parameters(),当有特殊需求时可以手动写一个 dict 来作为输入。

例如:

optim.SGD([
  {'params': model.base.parameters()},
  {'params': model.classifier.parameters(), 'lr': 1e-3}
], lr=1e-2, momentum=0.9)

这样 model.base 或者说大部分的参数使用 1e-2 的学习率,而 model.classifier 的参数使用 1e-3 的学习率,并且 0.9 的 momentum 被用于所有的参数。

梯度控制

在进行反向传播之前,必须要用 zero_grad() 清空梯度。具体的方法是遍历 self.param_groups 中全部参数,根据 grad 属性做清除。

例如:

for input, target in dataset:
  def closure():
    optimizer.zero_grad()
    output = model(input)
    loss = loss_fn(output, target)
    loss.backward()
    return loss
  optimizer.step(closure)

调整学习率

lr_scheduler 用于在训练过程中根据轮次灵活调控学习率。调整学习率的方法有很多种,但是其使用方法是大致相同的:用一个 Schedule 把原始 Optimizer 装饰上,然后再输入一些相关参数,然后用这个 Schedule 做 step()。

比如以 LambdaLR 举例:

lambda1 = lambda epoch: epoch // 30
lambda2 = lambda epoch: 0.95 ** epoch
scheduler = LambdaLR(optimizer, lr_lambda=[lambda1, lambda2])
for epoch in range(100):
 train(...)
 validate(...)
 scheduler.step()

上面用了两种优化器

优化方法

optim 库中实现的算法包括 Adadelta、Adagrad、Adam、基于离散张量的 Adam、基于 ∞ \infty∞ 范式的 Adam(Adamax)、Averaged SGD、L-BFGS、RMSProp、resilient BP、基于 Nesterov 的 SGD 算法。

以 SGD 举例:

optimizer = torch.optim.SGD(model.parameters(), lr=0.1, momentum=0.9)
optimizer.zero_grad()
loss_fn(model(input), target).backward()
optimizer.step()

其它方法的使用也一样:

opt_Adam = torch.optim.Adam(net_Adam.parameters(), lr=0.1, betas=(0.9, 0.99)
opt_RMSprop = torch.optim.RMSprop(net_RMSprop.parameters(), lr=0.1, alpha=0.9)
...
...

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
phpsir 开发 一个检测百度关键字网站排名的python 程序
Sep 17 Python
python使用两种发邮件的方式smtp和outlook示例
Jun 02 Python
Python抓取框架Scrapy爬虫入门:页面提取
Dec 01 Python
python批量替换页眉页脚实例代码
Jan 22 Python
PyCharm鼠标右键不显示Run unittest的解决方法
Nov 30 Python
机器学习实战之knn算法pandas
Jun 22 Python
python实现的分层随机抽样案例
Feb 25 Python
python GUI框架pyqt5 对图片进行流式布局的方法(瀑布流flowlayout)
Mar 12 Python
Pytorch 高效使用GPU的操作
Jun 27 Python
学python需要去培训机构吗
Jul 01 Python
Keras 数据增强ImageDataGenerator多输入多输出实例
Jul 03 Python
python 如何在list中找Topk的数值和索引
May 20 Python
Pytorch反向求导更新网络参数的方法
Aug 17 #Python
pytorch 模型可视化的例子
Aug 17 #Python
pytorch 输出中间层特征的实例
Aug 17 #Python
基于pytorch的保存和加载模型参数的方法
Aug 17 #Python
pytorch 固定部分参数训练的方法
Aug 17 #Python
python之PyQt按钮右键菜单功能的实现代码
Aug 17 #Python
pytorch 在网络中添加可训练参数,修改预训练权重文件的方法
Aug 17 #Python
You might like
树型结构列出指定目录里所有文件的PHP类
2006/10/09 PHP
PHP 文章中的远程图片采集到本地的代码
2009/07/30 PHP
写php分页时出现的Fatal error的解决方法
2011/04/18 PHP
PHP面向对象学习笔记之一 基础概念
2012/10/06 PHP
PHP使用微信开发模式实现搜索已发送图文及匹配关键字回复的方法
2017/09/13 PHP
Thinkphp5.0框架的Db操作实例分析【连接、增删改查、链式操作等】
2019/10/11 PHP
setAttribute 与 class冲突解决
2008/02/17 Javascript
11款基于Javascript的文件管理器
2009/10/25 Javascript
JavaScript Array对象扩展indexOf()方法
2014/05/09 Javascript
jQuery 中DOM 操作详解
2015/01/13 Javascript
JavaScript中常见的字符串操作函数及用法汇总
2015/05/04 Javascript
JavaScript基本的输出和嵌入式写法教程
2015/10/20 Javascript
解决wx.onMenuShareTimeline出现的问题
2016/08/16 Javascript
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
2016/12/30 NodeJs
javascript中new Array()和var arr=[]用法区别
2017/12/01 Javascript
angular1配合gulp和bower的使用教程
2018/01/19 Javascript
zTree 树插件实现全国五级地区点击后加载的示例
2018/02/05 Javascript
详解性能更优越的小程序图片懒加载方式
2018/07/18 Javascript
vue-router实现嵌套路由的讲解
2019/01/19 Javascript
如何在项目中使用log4.js的方法步骤
2019/07/16 Javascript
浅谈React中组件逻辑复用的那些事儿
2020/05/21 Javascript
JS实现数据动态渲染的竖向步骤条
2020/06/24 Javascript
Python机器学习之决策树算法实例详解
2017/12/06 Python
Python通过TensorFlow卷积神经网络实现猫狗识别
2019/03/14 Python
Python处理时间日期坐标轴过程详解
2019/06/25 Python
pytorch 状态字典:state_dict使用详解
2020/01/17 Python
Django serializer优化类视图的实现示例
2020/07/16 Python
苹果Mac升级:MacSales.com
2017/11/20 全球购物
荷兰皇家航空公司中国官网:KLM中国
2017/12/13 全球购物
写一个方法1000的阶乘
2012/11/21 面试题
网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?
2016/03/27 面试题
先进教师个人总结
2015/02/11 职场文书
2015年全国“爱牙日”宣传活动总结
2015/03/23 职场文书
2015年入党积极分子评语
2015/03/26 职场文书
工会经费申请报告
2015/05/15 职场文书
旅行社计调工作总结
2015/08/12 职场文书