Adam 优化器不更新值

Adam Optimizer not Updating Values

我正在尝试使用 Adam 优化器在神经网络之外获取某些值。我的技术不起作用,所以我创建了一个简单的示例来查看它是否有效:

a = np.array([[0.0,1.0,2.0,3.0,4.0], [0.0,1.0,2.0,3.0,4.0]])
b = np.array([[0.1,0.2,0.0,0.0,0.0], [0.0,0.5,0.0,0.0,0.0]])
a = torch.from_numpy(a)
b = torch.from_numpy(b)
a.requires_grad = True
b.requires_grad = True
optimizer = torch.optim.Adam(
        [b],
        lr=0.01,
        weight_decay=0.001
    )

iterations = 200
for i in range(iterations ):
    loss = torch.sqrt(((a.detach() - b.detach()) ** 2).sum(1)).mean()
    loss.requires_grad = True 
    
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

    if i % 10 == 0:
        print(b)
        print("loss:", loss)

我的直觉是b应该尽可能接近a以减少损失。但我看到 b 的任何值都没有变化,并且 loss 保持完全相同。我在这里错过了什么?谢谢

您正在分离 b,这意味着在反向传播时梯度不会一直流向 b b 获胜改变!此外,您不需要在 loss 上声明 requires_grad = True,因为这是自动完成的,因为其中一个操作数具有 requires_grad 标志。

loss = torch.sqrt(((a.detach() - b) ** 2).sum(1)).mean()