Я пытаюсь понять, как работает обратное распространение PyTorch, используя следующий код:
import torch
import numpy
x = torch.tensor(numpy.e, requires_grad=True)
y = torch.log(x)
y.backward()
print(x.grad)
Результат - tensor(0.3679)
, как и ожидалось, то есть 1 / x
, который является производной от log(x)
WRT x
с x = numpy.e
. Однако, если я снова выполню последние 3 строки, БЕЗ переназначения x
, т.е. сделаю
y = torch.log(x)
y.backward()
print(x.grad)
, тогда я получу tensor(0.7358)
, что вдвое больше предыдущего результата. Почему это происходит?