首页 > 解决方案 > 理解梯度计算的pytorch示例代码

问题描述

我不明白以下代码行的目的:

external_grad = torch.tensor([1., 1.])
Q.backward(gradient=external_grad)

这是来自https://pytorch.org/tutorials/beginner/blitz/autograd_tutorial.html的完整程序

import torch
import numpy as np
#
a = torch.tensor([2., 3.], requires_grad=True)
b = torch.tensor([6., 4.], requires_grad=True)
Q = 3* a**3 - b**2
#
print('a ',a)
print('---------------------')
print('b ',b)
print('---------------------')
print('Q ',Q)
print('---------------------')
#
# Q.backward()
#print(a.grad) results in 'grad can be implicitly created only for scalar outputs'
#print(b.grad) ditto
# because the tensor a, b contain more than 1 element
# https://discuss.pytorch.org/t/loss-backward-raises-error-grad-can-be-implicitly-created-only-for-scalar-outputs/12152
# pytorch doc : https://pytorch.org/tutorials/beginner/blitz/autograd_tutorial.html
#
external_grad = torch.tensor([1., 1.])
Q.backward(gradient=external_grad)
print(a.grad)
print(b.grad)

输出是:

a  tensor([2., 3.], requires_grad=True)
---------------------
b  tensor([6., 4.], requires_grad=True)
---------------------
Q  tensor([-12.,  65.], grad_fn=<SubBackward0>)
---------------------
tensor([36., 81.])
tensor([-12.,  -8.])

在我定义的网格点上匹配 dq/da 和 dq/db,但它是如何工作的?此外,未能提供:

梯度=external_grad

导致异常在代码中显示为注释

标签: pythonpytorchgradient

解决方案


推荐阅读