Pytorch. Можно ли использовать autograd, когда конечный тензор содержит более одного значения? - PullRequest
0 голосов
/ 13 ноября 2018

Можно ли использовать autograd, если в конечном тензоре содержится более одного значения?

Я пробовал следующее.

x = torch.tensor([4.0, 5.0], requires_grad=True)
y = x ** 2

print(y)

y.backward()

Выдает ошибку

RuntimeError: grad can be implicitly created only for scalar outputs

Однако работает следующее.

x = torch.tensor([4.0, 5.0], requires_grad=True)
y = x ** 2
y = torch.sum(y)
print(y)

y.backward()
print(x.grad)

Вывод:

tensor(41., grad_fn=<SumBackward0>)
tensor([ 8., 10.])

Am Iздесь чего-то не хватает, или я могу исходить из предположения, что autograd работает только тогда, когда конечный тензор имеет единственное значение?

1 Ответ

0 голосов
/ 13 ноября 2018

См. https://pytorch.org/tutorials/beginner/blitz/autograd_tutorial.html#gradients

y.backward() совпадает с y.backward(torch.tensor(1.0))

Обычно выход является скалярным, и, следовательно, скаляр передается в обратном направлении в качестве выбора по умолчанию.Однако, поскольку ваш вывод является двухмерным, вы должны позвонить y.backward(torch.tensor([1.0,1.0]))

Это даст ожидаемые результаты с x.grad, равным tensor([ 8., 10.])

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...