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()
我正在尝试使用 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()