`
wx1568037608
  • 浏览: 33547 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

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[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

 

分享到:
评论

相关推荐

    关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)

    PyTorch 提供了一个强大的 `torch.optim` 模块,它包含了多种优化算法,如随机梯度下降(SGD)、Adam、RMSprop 等。本文将详细介绍 `torch.optim` 的使用方法,并着重讲解如何根据需求自定义优化器,例如添加 L1 正则...

    浅谈Pytorch torch.optim优化器个性化的使用

    本文将探讨如何在PyTorch中实现`torch.optim`优化器的个性化使用,以便更好地控制模型训练过程。 首先,我们引入一个简单的LeNet网络模型作为示例。LeNet是一种经典的卷积神经网络,用于图像分类任务。在PyTorch中...

    梯度算法大合集——程序实现7种常用的梯度优化算法、5种线搜索方法,并与Pytorch的torch.optim对比结果

    梯度下降法是最著名的优化算法之一,本文基于Python和Pytorch编写了梯度优化程序Gradient_optim,并将结果与Pytorch中自带的梯度优化器torch.optim对比。 1.程序适用于任意维解析函数的无约束优化问题,求解最小值及...

    Pytorch,Torch等深度学习框架

    torch.nn 一个神经网络库与autograd设计了最大的灵活性torch.optim 一种与torch.nn一起使用的优化包,具有标准优化方法,如SGD,RMSProp,LBFGS,Adam等。 torch.multiprocessing python多处理,但是具有魔法内存...

    PyTorch 1.0 中文文档 & 教程.pdf

    文档中还涵盖了PyTorch核心模块和API的使用说明,例如`torch.Tensor`, `torch.nn`, `torch.optim`等。这些模块和API是构建神经网络的基础组件,涵盖了从张量操作到网络层定义再到优化器配置等方方面面。 ### ...

    pytorch_API_docs.zip

    pytorch API documentation 0.4.1 and 0.1.11 Python API torch torch.nn torch.nn.functional torch.Tensor Tensor Attributes torch.autograd torch.cuda torch.distributed torch.distributions torch...

    pytorch实现的源代码项目.rar

    import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader # 定义设备 device = torch.device("cuda" if torch.cuda.is_available() else "cpu") ...

    Python库 | torch_optim_sparse-0.1.1-py3-none-any.whl

    `torch_optim_sparse-0.1.1-py3-none-any.whl` 是一个与Python相关的库文件,特别地,它是针对PyTorch框架的一个优化器扩展库。这个库的名称暗示了它可能专注于实现针对稀疏参数的优化算法,这对于处理大规模稀疏...

    2024年PyTorch的应用与实现文档.docx

    在该领域,PyTorch 最常用的两个模块为 `torch.nn` 和 `torch.optim`: - **`torch.nn`**:提供了一系列基础神经网络操作,如卷积层、激活函数、损失函数等。 - **`torch.optim`**:提供了多种优化算法,如随机梯度...

    PyTorch 神经网络1

    PyTorch 提供了多种工具包,例如 torch.tensor、torch.nn、torch.autograd、torch.optim 等。这些工具包提供了实现神经网络所需的所有功能。 6. torch.nn 模块 torch.nn 模块提供了实现神经网络的功能,包括神经...

    PyTorch1.3.1官方文档.zip

    - **optim模块**:优化器接口,如SGD、Adam、Adagrad等。 - **torchvision模块**:专门用于图像处理,包括常见数据集的加载、预处理和模型转换。 4. **高级主题**: - **分布式训练**:如何在多GPU或多节点上...

    PyTorch官方教程中文版.zip

    5. **优化器(Optimizer)**:PyTorch的`torch.optim`模块提供了常见的优化算法,如随机梯度下降(SGD)、Adam、RMSprop等,用于更新网络权重以最小化损失函数。 6. **数据加载(Data Loading)**:PyTorch的`torch...

    基于PyTorch的深度学习模型实现.docx

    - 根据任务选择合适的损失函数和优化器,例如使用交叉熵损失和随机梯度下降优化器。 ```python criterion = nn.CrossEntropyLoss() optimizer = torch.optim.SGD(net.parameters(), lr=0.01) ``` 5. **模型...

    Python-PyTorchLBFGSLBFGS的PyTorch实现

    2. **PyTorch-LBFGS的实现:** 在PyTorch中,优化器是独立于模型和损失函数的,用户可以通过`torch.optim`模块导入LBFGS优化器,然后在训练过程中调用`step()`方法更新参数。PyTorch-LBFGS模块化的设计使得它易于与...

    PyTorch最新离线文档

    3. **模块和类**:详述PyTorch中的各个模块,如torch.nn用于构建神经网络,torch.optim用于优化模型参数,torch.utils.data用于数据加载和处理。 4. **张量操作**:涵盖各种张量运算,如加减乘除、转置、切片、索引...

    pytorch0.4.0 doc文档(HTML),离线查询相关api的使用

    4. **优化器(optim)**:PyTorch提供了一系列优化器,如SGD(随机梯度下降)、Adam(自适应矩估计)等,这些优化器用于更新网络参数以最小化损失函数。例如,`optimizer = torch.optim.SGD(model.parameters(), lr=...

    pytorch 在网络中添加可训练参数,修改预训练权重文件的方法

    实践中,针对不同的任务需求,我们经常会在...import torch.optim as optim x = Variable(torch.FloatTensor([1, 2, 3])).cuda() y = Variable(torch.FloatTensor([4, 5])).cuda() class MLP(torch.nn.Module): def __

Global site tag (gtag.js) - Google Analytics