cost
должен быть результатом операции, включающей params
. Вы не можете вычислить градиент, просто зная значения двух тензоров. Вам также необходимо знать отношения. Вот почему Pytorch создает граф вычислений, когда вы выполняете тензорные операции. Например, допустим, что отношение равно
cost = torch.sum(params)
, тогда мы ожидаем, что градиент cost
относительно params
будет вектором единиц независимо от значения params
.
Это можно рассчитать следующим образом. Обратите внимание, что вам нужно добавить флаг requires_grad
, чтобы указать pytorch, что вы хотите backward
обновить градиент при вызове.
# Initialize independent variable. Make sure to set requires_grad=true.
params = torch.tensor((1, 73, 240), requires_grad=True)
# Compute cost, this implicitly builds a computation graph which records
# how cost was computed with respect to params.
cost = torch.sum(params)
# Zero the gradient of params in case it already has something in it.
# This step is optional in this example but good to do in practice to
# ensure you're not adding gradients to existing gradients.
if params.grad is not None:
params.grad.zero_()
# Perform back propagation. This is where the gradient is actually
# computed. It also resets the computation graph.
cost.backward()
# The gradient of params w.r.t to cost is now stored in params.grad.
print(params.grad)
Результат:
tensor([1., 1., 1.])