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.ba.parameters()},
{'params': model.classifier.parameters(), 'lr': 1e-3}
], lr=1e-2, momentum=0.9)
这意味着model.ba的参数将会使⽤1e-2的学习率,model.classifier的参数将会使⽤1e-3的学习率,并且0.9的momentum将会被⽤于所有的参数。
进⾏单次优化
所有的optimizer都实现了step()⽅法,这个⽅法会更新所有的参数。它能按两种⽅式来使⽤:
optimizer.step()
这是⼤多数optimizer所⽀持的简化版本。⼀旦梯度被如backward()之类的函数计算好后,我们就可以调⽤这个函数。
例⼦
保护视力的手抄报
for input, target in datat:
<_grad()
output = model(input)
loss = loss_fn(output, target)
loss.backward()
optimizer.step()
optimizer.step(closure)
⼀些优化算法例如Conjugate Gradient和LBFGS需要重复多次计算函数,因此你需要传⼊⼀个闭包去允许它们重新计算你的模型。这个闭包应当清空梯度,
计算损失,然后返回。
例⼦:
for input, target in datat:
def closure():
<_grad()
output = model(input)
loss = loss_fn(output, target)
loss.backward()
return loss
optimizer.step(closure)
算法
伊索寓言有哪些class torch.optim.Optimizer(params, defaults) [source]
Ba 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算法。
参数:
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算法。
参数:
params (iterable) – 待优化参数的iterable或者是定义了参数组的dict