【发布时间】:2020-07-30 18:28:30
【问题描述】:
以下代码确实可以使用以下代码更新权重:
w -= lr * w.grad
但是当使用更新权重时
w = w - lr * w.grad
它把我扔了:
张量的元素 0 不需要 grad 也没有 grad_fn
为什么会这样,两个分配不应该相等?
import torch
X = torch.tensor([1, 2, 3, 4], dtype=torch.float32)
y = torch.tensor([2, 4, 6, 8], dtype=torch.float32)
w = torch.tensor(0.0, dtype=torch.float32, requires_grad=True)
epochs = 10
lr = 0.002
for epoch in range(1, epochs + 1):
y_pred = w * X
loss = ((y_pred - y)**2).mean()
loss.backward()
print(w.grad)
with torch.no_grad():
### Option 1 - doesn't work
w = w - lr * w.grad
### Option 2 - does work
w -= lr * w.grad
w.grad.zero_()
【问题讨论】: