Почему в этом случае torch.autograd не вычисляет градиент? - PullRequest
0 голосов
/ 15 апреля 2020

Почему в этом случае torch.autograd не вычисляет градиент?

import torch
x = torch.tensor([1., 2., ], requires_grad=True)
y = torch.tensor([x[0] + x[1], x[1] - x[0], ], requires_grad=True)
z = y[0] + y[1]
z.backward()
x.grad

Вывод - пустая строка (нет). То же самое происходит для x[0].grad. Почему?

PS: Оглядываясь назад, я понимаю, что мотивация сделать y тензор с requires_grad была такой, чтобы я мог изучить его собственный градиент. Я узнал, что для этого нужно использовать retain_grad: Почему автоград не производит градиент для промежуточных переменных?

1 Ответ

1 голос
/ 15 апреля 2020

Когда вы используете torch.tensor для y, он просто использует значения x для инициализации тензора, цепочка градиента теряется.

Это работает:

x = torch.tensor([1., 2., ], requires_grad=True)
y = [x[0] + x[1], x[1] - x[0], ]
z = y[0] + y[1]
z.backward()
x.grad

Результат tensor([0., 2.])

...