Следующий код
w = np.array([[2., 2.],[2., 2.]])
x = np.array([[3., 3.],[3., 3.]])
b = np.array([[4., 4.],[4., 4.]])
w = torch.tensor(w, requires_grad=True)
x = torch.tensor(x, requires_grad=True)
b = torch.tensor(b, requires_grad=True)
y = w*x + b
print(y)
# tensor([[10., 10.],
# [10., 10.]], dtype=torch.float64, grad_fn=<AddBackward0>)
y.backward(torch.FloatTensor([[1, 1],[ 1, 1]]))
print(w.grad)
# tensor([[3., 3.],
# [3., 3.]], dtype=torch.float64)
print(x.grad)
# tensor([[2., 2.],
# [2., 2.]], dtype=torch.float64)
print(b.grad)
# tensor([[1., 1.],
# [1., 1.]], dtype=torch.float64)
Поскольку аргумент тензора внутри функции gradient
является тензором всех единиц в форме входного тензора, я понимаю, что
-
w.grad
означает производную от y
по w
и дает b
,
x.grad
означает производную от y
по x
, и производит b
и
b.grad
означает производную от y
wrt b
и производит все единицы.
Out of это только пункт 3 ответа соответствует моему ожидаемому результату. Может ли кто-нибудь помочь мне понять первые два ответа. Думаю, я понимаю часть накопления, но не думаю, что здесь происходит.