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的闭包,对于大多数参数来说是可选的。
艾伯特()国内第一家人工智能门户