Pytorch----torch.optim

torch.optim.Adam():

class torch.optim.Adam(params, lr=0.001, betas=(0.9, 0.999), eps=1e-08, weight_decay=0)[source]
  • 参数:
    • params (iterable) 待优化参数的iterable或者是定义了参数组的dict
    • lr (float, 可选) – 学习率(默认:1e-3
    • betas (Tuple[floatfloat], 可选) – 用于计算梯度以及梯度平方的运行平均值的系数(默认:0.9,0.999)
    • eps (float, 可选) – 为了增加数值计算的稳定性而加到分母里的项(默认:1e-8)
    • weight_decay (float, 可选) – 权重衰减(L2惩罚)(默认: 0)

torch.optim

功能:

  • 构建一个optimizer对象。(该对象:保持参数状态,基于梯度更新参数

构建:

  • 包含需要优化参数的iterable
optimizer = optim.SGD(model.parameters(), lr = 0.01, momentum=0.9)
optimizer = optim.Adam([var1, var2], lr = 0.0001)

为每个参数单独设置选项:

  • 不是传入Variable的iterable,而是传入dict的iterable
  • 每个dict都分别定义了一组参数,并包含一个“param”键。(此键 对应参数列表)
optim.SGD([
                {'params': model.base.parameters()},
                {'params': model.classifier.parameters(), 'lr': 1e-3}
            ], lr=1e-2, momentum=0.9)

进行单次优化(更新所有参数):

  • 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):???一些优化算法例如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)

 

你可能感兴趣的:(Pytorch)