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 相关文章推荐
Python入门教程之if语句的用法
May 14 Python
python读取TXT到数组及列表去重后按原来顺序排序的方法
Jun 26 Python
Python父目录、子目录的相互调用方法
Feb 16 Python
pyqt实现.ui文件批量转换为对应.py文件脚本
Jun 19 Python
Python实现 PS 图像调整中的亮度调整
Jun 28 Python
python中update的基本使用方法详解
Jul 17 Python
python用match()函数爬数据方法详解
Jul 23 Python
python爬虫容易学吗
Jun 02 Python
基于Python爬虫采集天气网实时信息
Jun 05 Python
浅析NumPy 切片和索引
Sep 02 Python
python中用ggplot绘制画图实例讲解
Jan 26 Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
Feb 04 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 中文字符入库或显示乱码问题的解决方法
2010/04/12 PHP
php 判断是否是中文/英文/数字示例代码
2013/09/30 PHP
php通过数组实现多条件查询实现方法(字符串分割)
2014/05/06 PHP
利用Homestead快速运行一个Laravel项目的方法详解
2017/11/14 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
用javascript获取textarea中的光标位置
2008/05/06 Javascript
锋利的jQuery 要点归纳(一) jQuery选择器
2010/03/21 Javascript
基于jquery的表格排序
2010/09/11 Javascript
jQuery find和children方法使用
2011/01/31 Javascript
始终在屏幕中间显示Div的代码(css+js)
2011/03/10 Javascript
判断输入是否为空,获得输入类型的JS代码
2013/10/30 Javascript
javascript操作数组详解
2014/12/17 Javascript
JavaScript实现阿拉伯数字和中文数字互相转换
2016/06/12 Javascript
js获取隐藏元素的宽高
2017/02/24 Javascript
JavaScript字符串_动力节点Java学院整理
2017/06/27 Javascript
Angular客户端请求Rest服务跨域问题的解决方法
2017/09/19 Javascript
详解webpack提取第三方库的正确姿势
2017/12/22 Javascript
vue.js select下拉框绑定和取值方法
2018/03/03 Javascript
js实现简单的贪吃蛇游戏
2020/04/23 Javascript
javascript实现京东登录显示隐藏密码
2020/08/02 Javascript
python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
2014/04/25 Python
Python实现的计算器功能示例
2018/04/26 Python
Python基于opencv实现的简单画板功能示例
2019/03/04 Python
详解python中的线程与线程池
2019/05/10 Python
python数据挖掘需要学的内容
2019/06/23 Python
Python Django简单实现session登录注销过程详解
2019/08/06 Python
css3 border-image使用说明
2010/06/23 HTML / CSS
详解HTML5中的Communication API基本使用方法
2016/01/29 HTML / CSS
朗仕(Lab series)英国官网:雅诗兰黛集团男士专属护肤品牌
2017/11/28 全球购物
墨尔本复古时尚品牌:Dangerfield
2018/12/12 全球购物
轻金属冶金专业毕业生自荐信
2013/11/02 职场文书
银行委托书范本
2014/04/04 职场文书
公司贷款承诺书
2014/05/30 职场文书
居委会四风问题个人对照检查材料
2014/09/25 职场文书
毕业典礼致辞
2015/07/29 职场文书
2016秋季运动会开幕词
2016/03/04 职场文书