Как работает torch.Tensor.backward ()? - PullRequest
1 голос
/ 28 июня 2019

Я недавно изучал Pytorch и обратную функцию пакета.Я понял, как его использовать, но когда я пытаюсь

x = Variable(2*torch.ones(2, 2), requires_grad=True)
x.backward(x)
print(x.grad)

, я ожидаю

tensor([[1., 1.],
        [1., 1.]])

, потому что это функция идентификации.Однако он возвращает

tensor([[2., 2.],
        [2., 2.]]).

Почему это происходит?

1 Ответ

0 голосов
/ 28 июня 2019

На самом деле, это то, что вы ищете:

Случай 1: когда z = 2 * x ** 3 + x

import torch
from torch.autograd import Variable
x = Variable(2*torch.ones(2, 2), requires_grad=True)
z = x*x*x*2+x
z.backward(torch.ones_like(z))
print(x.grad)

вывод:

tensor([[25., 25.],
        [25., 25.]])

Случай 2: когда z = x * x

x = Variable(2*torch.ones(2, 2), requires_grad=True)
z = x*x
z.backward(torch.ones_like(z))
print(x.grad)

Выход:

tensor([[4., 4.],
        [4., 4.]])

Случай 3: , когда z = x (ваш случай)

x = Variable(2*torch.ones(2, 2), requires_grad=True)
z = x
z.backward(torch.ones_like(z))
print(x.grad)

вывод:

tensor([[1., 1.],
        [1., 1.]])

Чтобы узнать больше о том, как рассчитать градиент в pytorch, отметьте this .

...