详情可参考官方文档
所有优化器都实现一种step()更新参数的方法。它可以以两种方式使用:
optimizer.step()
这是大多数优化程序支持的简化版本。一旦用来计算梯度,就可以调用该函数 backward()。
例:
for input, target in dataset:
optimizer.zero_grad()
output = model(input)
loss = loss_fn(output, target)
loss.backward()
optimizer.step()
optimizer.step(closure)
一些优化算法(例如共轭梯度和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)