PyTorch官方中文文档:torch.optim 优化器参数
- 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 loss
optimizer.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[
float,float], 可选) – 用于计算梯度以及梯度平方的运行平均值的系数(默认: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[
float,float], 可选) – 用于计算梯度以及梯度平方的运行平均值的系数
- 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[
float,float], 可选) – 一对(etaminus,etaplis), 它们分别是乘法的增加和减小的因子(默认:0.5,1.2)
- step_sizes (Tuple[
float,float], 可选) – 允许的一对最小和最大的步长(默认: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 优化器参数的更多相关文章
- PyTorch官方中文文档:torch.nn
torch.nn Parameters class torch.nn.Parameter() 艾伯特(http://www.aibbt.com/)国内第一家人工智能门户,微信公众号:aibbtcom ...
- PyTorch官方中文文档:PyTorch中文文档
PyTorch中文文档 PyTorch是使用GPU和CPU优化的深度学习张量库. 说明 自动求导机制 CUDA语义 扩展PyTorch 多进程最佳实践 序列化语义 Package参考 torch to ...
- PyTorch官方中文文档:torch.optim
torch.optim torch.optim是一个实现了各种优化算法的库.大部分常用的方法得到支持,并且接口具备足够的通用性,使得未来能够集成更加复杂的方法. 如何使用optimizer 为了使用t ...
- PyTorch官方中文文档:torch
torch 包 torch 包含了多维张量的数据结构以及基于其上的多种数学操作.另外,它也提供了多种工具,其中一些可以更有效地对张量和任意类型进行序列化. 它有CUDA 的对应实现,可以在NVIDIA ...
- PyTorch官方中文文档:torch.Tensor
torch.Tensor torch.Tensor是一种包含单一数据类型元素的多维矩阵. Torch定义了七种CPU tensor类型和八种GPU tensor类型: Data tyoe CPU te ...
- PyTorch官方中文文档:自动求导机制
自动求导机制 本说明将概述Autograd如何工作并记录操作.了解这些并不是绝对必要的,但我们建议您熟悉它,因为它将帮助您编写更高效,更简洁的程序,并可帮助您进行调试. 从后向中排除子图 每个变量都有 ...
- ReactNative官方中文文档0.21
整理了一份ReactNative0.21中文文档,提供给需要的reactnative爱好者.ReactNative0.21中文文档.chm 百度盘下载:ReactNative0.21中文文档 来源: ...
- 学习Python 新去处:Python 官方中文文档
Python 作为世界上最好用的语言,官方支持的文档一直没有中文.小伙伴们已经习惯了原汁原味的英文文档,但如果有官方中文文档,那么查阅或理解速度都会大大提升.本文将介绍隐藏在 Python 官网的中文 ...
- django2.0 官方中文文档地址
django2.0 官方开始发布中文文档了,之前还想着一直翻译完成所有有必要的内容,想着可以省事一些了,打开以后看了一下,发现官方的中文文档还没翻译完成, 现在(2018-7-10)最新章节是是 编 ...
随机推荐
- 百度DMLC分布式深度机器学习开源项目(简称“深盟”)上线了如xgboost(速度快效果好的Boosting模型)、CXXNET(极致的C++深度学习库)、Minerva(高效灵活的并行深度学习引擎)以及Parameter Server(一小时训练600T数据)等产品,在语音识别、OCR识别、人脸识别以及计算效率提升上发布了多个成熟产品。
百度为何开源深度机器学习平台? 有一系列领先优势的百度却选择开源其深度机器学习平台,为何交底自己的核心技术?深思之下,却是在面对业界无奈时的远见之举. 5月20日,百度在github上开源了其 ...
- PHPCMS快速建站系列之getcache()的用法
/** * 读取缓存,默认为文件缓存,不加载缓存配置. * @param string $name 缓存名称 * @param $filepath 数据路径(模块名称) caches/cache_$f ...
- fedora下eclipse安装tomcat插件
首先下载tomcat插件: http://www.eclipsetotale.com/tomcatPlugin.html,下载最新的3.3版本: 由于我的eclipse是通过yum自动安装的,因此ec ...
- SQL Server 记录(更新中...)
sys.databases 显示所有数据库信息 sys.tables 显示当前数据库所有的表的信息 Go 向 SQL Server 实用工具发出一批 Transact-SQL 语句已结束的信号,Go本 ...
- C# 获取上传文件的文件名和后缀名
//获得要上传的文件 HttpPostedFile file = Request.Files[]; //获得到文件名 string fileName = System.IO.Path.GetFileN ...
- 【JZOJ4832】【NOIP2016提高A组集训第3场10.31】高维宇宙
题目描述 数据范围 解法 由于大于4的素数只有可能由奇数和偶数的和得出. 所以根据数的奇偶性可以分出两类数奇数和偶数. 奇数之间不会相互匹配,偶数之间也不会相互匹配. 那么原问题转化为二分图最大匹配. ...
- hdu4313 贪心+并查集
题意简单思路也还可以.开始从小到大排序非常烦.后来从大到小就很简单了: 从大到小解决了删除的边最小. #include<stdio.h> #include<string.h> ...
- Spring Boot错误——SpringBoot 2.0 报错: Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
背景 使用Spring Cloud搭建微服务,服务的注册与发现(Eureka)项目启动时报错,错误如下 *************************** APPLICATION FAILED T ...
- HTTP Status 500 - java.lang.ClassNotFoundException: org.apache.jsp.register_jsp
你搜一下你的页面中是不是有<!---->的注释 去掉就好了 改成jsp的注释 1).JSP页面中的HTML注释 JSP页面中的HTML注释使用“<!—”和“-->”创建,它的具 ...
- 2019-2-27-如何替换一个-exe-的图标
title author date CreateTime categories 如何替换一个 exe 的图标 lindexi 2019-02-27 20:33:16 +0800 2019-2-27 2 ...