内容预览:

  • step(closure) 进行单次优化 (参数更新). 参数: closure (callable) –...~
  • 参数: params (iterable) – 待优化参数的iterable或者是定义了参数组的...~
  • 参数: params (iterable) – 待优化参数的iterable或者是定义了参数组的...~

torch.optim

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

如何使用optimizer

为了使用torch.optim,你需要构建一个optimizer对象。这个对象能够保持当前参数状态并基于计算得到的梯度进行参数更新。

构建

为了构建一个Optimizer,你需要给它一个包含了需要优化的参数(必须都是Variable对象)的iterable。然后,你可以设置optimizer的参
数选项,比如学习率,权重衰减,等等。

例子:

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

为每个参数单独设置选项

Optimizer也支持为每个参数单独设置选项。若想这么做,不要直接传入Variable的iterable,而是传入dict的iterable。每一个dict都分别定
义了一组参数,并且包含一个param键,这个键对应参数的列表。其他的键应该optimizer所接受的其他参数的关键字相匹配,并且会被用于对这组参数的
优化。

注意:

你仍然能够传递选项作为关键字参数。在未重写这些选项的组中,它们会被用作默认值。当你只想改动一个参数组的选项,但其他参数组的选项不变时,这是
非常有用的。

例如,当我们想指定每一层的学习率时,这是非常有用的:

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将会被用于所
有的参数。

进行单次优化

所有的optimizer都实现了step()方法,这个方法会更新所有的参数。它能按两种方式来使用:

optimizer.step()

这是大多数optimizer所支持的简化版本。一旦梯度被如backward()之类的函数计算好后,我们就可以调用这个函数。

例子

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

optimizer.step(closure)

一些优化算法例如Conjugate Gradient和LBFGS需要重复多次计算函数,因此你需要传入一个闭包去允许它们重新计算你的模型。这个闭包应当清空梯度,
计算损失,然后返回。

例子:

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

算法

class torch.optim.Optimizer(params, defaults) [source]

Base class for all optimizers.

参数:

  • params (iterable) —— Variable 或者 dict的iterable。指定了什么参数应当被优化。
  • defaults —— (dict):包含了优化选项默认值的字典(一个参数组没有指定的参数选项将会使用默认值)。

load_state_dict(state_dict) [source]

加载optimizer状态

参数:

state_dict (dict) —— optimizer的状态。应当是一个调用state_dict()所返回的对象。

state_dict() [source]

dict返回optimizer的状态。

它包含两项。

  • state – 一个保存了当前优化状态的dict。optimizer的类别不同,state的内容也会不同。
  • param_groups – 一个包含了全部参数组的dict。

step(closure) [source]

进行单次优化 (参数更新).

参数:

  • closure (callable) – 一个重新评价模型并返回loss的闭包,对于大多数参数来说是可选的。

zero_grad() [source]

清空所有被优化过的Variable的梯度.

class torch.optim.Adadelta(params, lr=1.0, rho=0.9, eps=1e-06, weight_decay=0)[source]

实现Adadelta算法。

它在ADADELTA: An Adaptive Learning Rate Method.中被提出。

参数:

  • params (iterable) – 待优化参数的iterable或者是定义了参数组的dict
  • rho (float, 可选) – 用于计算平方梯度的运行平均值的系数(默认:0.9)
  • eps (float, 可选) – 为了增加数值计算的稳定性而加到分母里的项(默认:1e-6)
  • lr (float, 可选) – 在delta被应用到参数更新之前对它缩放的系数(默认:1.0)
  • weight_decay (float, 可选) – 权重衰减(L2惩罚)(默认: 0)

step(closure) [source]

进行单次优化 (参数更新).

参数:

  • closure (callable) – 一个重新评价模型并返回loss的闭包,对于大多数参数来说是可选的。

class torch.optim.Adagrad(params, lr=0.01, lr_decay=0, weight_decay=0)[source]

实现Adagrad算法。

它在 Adaptive Subgradient Methods for Online Learning and Stochastic Optimization中被提出。

参数:

  • params (iterable) – 待优化参数的iterable或者是定义了参数组的dict
  • lr (float, 可选) – 学习率(默认: 1e-2)
  • lr_decay (float, 可选) – 学习率衰减(默认: 0)
  • weight_decay (float, 可选) – 权重衰减(L2惩罚)(默认: 0)

step(closure) [source]

进行单次优化 (参数更新).

参数:

  • closure (callable) – 一个重新评价模型并返回loss的闭包,对于大多数参数来说是可选的。

class torch.optim.Adam(params, lr=0.001, betas=(0.9, 0.999), eps=1e-08, weight_decay=0)[source]

实现Adam算法。

它在Adam: A Method for Stochastic Optimization中被提出。

参数:

  • params (iterable) – 待优化参数的iterable或者是定义了参数组的dict
  • lr (float, 可选) – 学习率(默认:1e-3)
  • betas (Tuple[floatfloat], 可选) – 用于计算梯度以及梯度平方的运行平均值的系数(默认:0.9,0.999)
  • eps (float, 可选) – 为了增加数值计算的稳定性而加到分母里的项(默认:1e-8)
  • weight_decay (float, 可选) – 权重衰减(L2惩罚)(默认: 0)

step(closure) [source]

进行单次优化 (参数更新).

参数:

  • closure (callable) – 一个重新评价模型并返回loss的闭包,对于大多数参数来说是可选的。

class torch.optim.Adamax(params, lr=0.002, betas=(0.9, 0.999), eps=1e-08, weight_decay=0)[source]

实现Adamax算法(Adam的一种基于无穷范数的变种)。

它在Adam: A Method for Stochastic Optimization中被提出。

参数:

  • params (iterable) – 待优化参数的iterable或者是定义了参数组的dict
  • lr (float, 可选) – 学习率(默认:2e-3)
  • betas (Tuple[floatfloat], 可选) – 用于计算梯度以及梯度平方的运行平均值的系数
  • eps (float, 可选) – 为了增加数值计算的稳定性而加到分母里的项(默认:1e-8)
  • weight_decay (float, 可选) – 权重衰减(L2惩罚)(默认: 0)

step(closure) [source]

进行单次优化 (参数更新).

参数:

  • closure (callable) – 一个重新评价模型并返回loss的闭包,对于大多数参数来说是可选的。

class torch.optim.ASGD(params, lr=0.01, lambd=0.0001, alpha=0.75, t0=1000000.0, weight_decay=0)[source]

实现平均随机梯度下降算法。

它在Acceleration of stochastic approximation by averaging中被提出。

参数:

  • params (iterable) – 待优化参数的iterable或者是定义了参数组的dict
  • lr (float, 可选) – 学习率(默认:1e-2)
  • lambd (float, 可选) – 衰减项(默认:1e-4)
  • alpha (float, 可选) – eta更新的指数(默认:0.75)
  • t0 (float, 可选) – 指明在哪一次开始平均化(默认:1e6)
  • weight_decay (float, 可选) – 权重衰减(L2惩罚)(默认: 0)

step(closure) [source]

进行单次优化 (参数更新).

参数:

  • closure (callable) – 一个重新评价模型并返回loss的闭包,对于大多数参数来说是可选的。

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)[source]

实现L-BFGS算法。

警告

这个optimizer不支持为每个参数单独设置选项以及不支持参数组(只能有一个)

警告

目前所有的参数不得不都在同一设备上。在将来这会得到改进。

注意

这是一个内存高度密集的optimizer(它要求额外的param_bytes * (history_size + 1) 个字节)。如果它不适应内存,尝试减小history size,或者使用不同的算法。

参数:

  • lr (float) – 学习率(默认:1)
  • max_iter (int) – 每一步优化的最大迭代次数(默认:20))
  • max_eval (int) – 每一步优化的最大函数评价次数(默认:max * 1.25)
  • tolerance_grad (float) – 一阶最优的终止容忍度(默认:1e-5)
  • tolerance_change (float) – 在函数值/参数变化量上的终止容忍度(默认:1e-9)
  • history_size (int) – 更新历史的大小(默认:100)

step(closure) [source]

进行单次优化 (参数更新).

参数:

  • closure (callable) – 一个重新评价模型并返回loss的闭包,对于大多数参数来说是可选的。

class torch.optim.RMSprop(params, lr=0.01, alpha=0.99, eps=1e-08, weight_decay=0, momentum=0, centered=False)[source]

实现RMSprop算法。

由G. Hinton在他的课程中提出.

中心版本首次出现在Generating Sequences With Recurrent Neural Networks.

参数:

  • params (iterable) – 待优化参数的iterable或者是定义了参数组的dict
  • lr (float, 可选) – 学习率(默认:1e-2)
  • momentum (float, 可选) – 动量因子(默认:0)
  • alpha (float, 可选) – 平滑常数(默认:0.99)
  • eps (float, 可选) – 为了增加数值计算的稳定性而加到分母里的项(默认:1e-8)
  • centered (bool, 可选) – 如果为True,计算中心化的RMSProp,并且用它的方差预测值对梯度进行归一化
  • weight_decay (float, 可选) – 权重衰减(L2惩罚)(默认: 0)

step(closure) [source]

进行单次优化 (参数更新).

参数:

  • closure (callable) – 一个重新评价模型并返回loss的闭包,对于大多数参数来说是可选的。

class torch.optim.Rprop(params, lr=0.01, etas=(0.5, 1.2), step_sizes=(1e-06, 50))[source]

实现弹性反向传播算法。

参数:

  • params (iterable) – 待优化参数的iterable或者是定义了参数组的dict
  • lr (float, 可选) – 学习率(默认:1e-2)
  • etas (Tuple[floatfloat], 可选) – 一对(etaminus,etaplis), 它们分别是乘法的增加和减小的因子(默认:0.5,1.2)
  • step_sizes (Tuple[floatfloat], 可选) – 允许的一对最小和最大的步长(默认:1e-6,50)

step(closure) [source]

进行单次优化 (参数更新).

参数:

  • closure (callable) – 一个重新评价模型并返回loss的闭包,对于大多数参数来说是可选的。

class torch.optim.SGD(params, lr=, momentum=0, dampening=0, weight_decay=0, nesterov=False)[source]

实现随机梯度下降算法(momentum可选)。

Nesterov动量基于On the importance of initialization and momentum in deep learning中的公式.

参数:

  • params (iterable) – 待优化参数的iterable或者是定义了参数组的dict
  • lr (float) – 学习率
  • momentum (float, 可选) – 动量因子(默认:0)
  • weight_decay (float, 可选) – 权重衰减(L2惩罚)(默认:0)
  • dampening (float, 可选) – 动量的抑制因子(默认:0)
  • nesterov (bool, 可选) – 使用Nesterov动量(默认:False)

例子:

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

Note

带有动量/Nesterov的SGD的实现稍微不同于Sutskever等人以及其他框架中的实现。

考虑动量的具体情况,更新可以写成

v=ρ∗v+g

p=p−lr∗v

其中,p、g、v和ρ分别是参数、梯度、速度和动量。

这跟Sutskever等人以及其他框架的实现是相反的,它们采用这样的更新

v=ρ∗v+lr∗g

p=p−v

Nesterov的版本也类似地被修改了。

step(closure) [source]

进行单次优化 (参数更新).

参数:

  • closure (callable) – 一个重新评价模型并返回loss的闭包,对于大多数参数来说是可选的。

艾伯特(http://www.aibbt.com/)国内第一家人工智能门户

以上就是:PyTorch官方中文文档:torch.optim 的全部内容。

本站部分内容来源于互联网和用户投稿,如有侵权请联系我们删除,谢谢。
Email:server@01hai.com

PyTorch官方中文文档:torch.optim 优化器参数相关推荐

  1. PyTorch 笔记(18)— torch.optim 优化器的使用

    到目前为止,代码中的神经网络权重的参数优化和更新还没有实现自动化,并且目前使用的优化方法都有固定的学习速率,所以优化函数相对简单,如果我们自己实现一些高级的参数优化算法,则优化函数部分的代码会变得较为 ...

  2. PyTorch官方中文文档上线啦!

    有幸可以参与这次文档的翻译工作,走过路过的大佬请点个star,谢谢各位了,Orz 官网地址:https://pytorch.org/ 中文主页地址:http://pytorch.apachecn.or ...

  3. Python 深度学习库 Keras 发布官方中文文档,这里有你需要了解的一切

    今年1月,Keras作者.谷歌AI研究员François Chollet在推特上发出召唤:讲中文的Keras用户们,是否有人愿意帮忙一起搞个Keras文档的中文版? 一个多月后,官方中文文档来了. K ...

  4. LightGBM官方中文文档上线啦!

    LightGBM官方中文文档上线啦! 本博客转载自:https://blog.csdn.net/qq_33638791/article/details/78972853 有幸可以参与这次文档的翻译工作 ...

  5. Backtrader官方中文文档

    代码有所删减,完整版及在线运行可访问Backtrader官方中文文档 一. backtrader介绍 制定策略 1.1 确定潜在的可调参数 1.2 实例化您在策略中需要的指标 1.3 写下进入/退出市 ...

  6. Spring Cloud Alibaba 官方中文文档

    Spring Cloud Alibaba 官方中文文档 1. 介绍 Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案.此项目包含开发分布式应用服务的必需组件,方便开发者通 ...

  7. python语言需要英语非常好吗-Python用不好英语水平不够?这里有官方中文文档你看不看...

    Python 作为世界上最好用的语言,官方支持的文档一直没有中文.小伙伴们已经习惯了原汁原味的英文文档,但如果有官方中文文档,那么查阅或理解速度都会大大提升.本文将介绍隐藏在 Python 官网的中文 ...

  8. python官方-Python官方中文文档强势来袭

    原标题:Python官方中文文档强势来袭 Python 官方支持的文档一直没有中文.小伙伴们已经习惯了原汁原味的英文文档,但如果有官方中文文档,对于初学者来说,门槛会大大的降低.现在中文文档强势来袭 ...

  9. 利用Python3内置文档资源高效学习及官方中文文档

    概述 从前面的对Python基础知识方法介绍中,我们几乎是围绕Python内置方法进行探索实践,比如字符串.列表.字典等数据结构的内置方法,和大量内置的标准库,诸如functools.time.thr ...

最新文章

  1. NLP(4) | 用词向量技术简单分析红楼梦人物关系用n-gramma生成词向量word2vect进行模型训练
  2. 区块链论文9 FlyClient-加密货币的超轻客户端
  3. SQL Server复制需要有实际的服务器名称才能连接到服务器
  4. 常用的 css 样式 记录
  5. matlab贝叶斯优化工具箱_经济学人的神器——BEAR(贝叶斯估计、分析和回归工具包)...
  6. 要不要借钱给好朋友?救急不救贫
  7. invoke 魔术_PHP常用魔术方法(__invoke魔术方法)
  8. 如何在Linux系统列出systemd下所有正在运行的服务
  9. 【笔记】生成函数与大背包问题
  10. 那年,寻找工作的历程
  11. 【优化算法】学生心理学优化算法(SPBO)【含Matlab源码 1430期】
  12. 【mobile】安卓图案解锁尝试次数过多导致 要解锁需要GOOGLE账户登录,解决方案...
  13. Python100道经典练习题(附PDF)
  14. 分享17个老罗Android开发视频教程(免费下载)
  15. C++判断一个数是否为素数
  16. python编写一个汇率兑换程序_汇率兑换—python第一课
  17. JAVA集成微信支付 周期扣费
  18. UVA 202 - Repeating Decimals(模拟)
  19. 库存遮羞布被揭开,高通提前发布骁龙8G2,国产手机已无路可走
  20. java通信—网络聊天室网络画板(简陋版)

热门文章

  1. 2022-2028年中国煤制天然气市场投资分析及前景预测报告
  2. 吸水间最低动水位标高_水库水位库容监测系统方案
  3. 2022-2028年中国电动牙刷行业深度调研及投资前景预测报告(全卷)
  4. 2022-2028年中国顺丁橡胶行业发展模式分析及市场分析预测报告
  5. 2022-2028年中国电竞椅行业市场行情监测及未来发展前景研究报告
  6. Java学到什么水平能够出去找工作!
  7. PyTorch-Adam优化算法原理,公式,应用
  8. 微调torchvision 0.3的目标检测模型
  9. MindSpore平台系统类
  10. 使用元组输入进行计算和归约