python - 理解梯度计算的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
导致异常在代码中显示为注释
解决方案
推荐阅读
- haskell - 如何管理 cabal 沙箱
- filter - 如何将过滤器应用于 DC.js PieChart?
- slack - 从松弛搜索 api 结果中排除机器人用户
- python - How to loop in dataframe with a specific condition?
- php - 基于 WooCommerce 中所选品牌的动态选择字段选项
- mysql - 我可以在不使用 mysqldump 只使用文件/文件夹备份的情况下备份多个 mysql 数据库(所有 InnoDB)吗
- excel - 通过 COM 使用 NotesDocument.ConvertToMIME
- oauth - 如何为 SOAP 测试添加 oAuth 配置文件
- reactjs - useEffect() React Hook Dependency Array lint 规则
- python - AttributeError: dlsym(RTLD_DEFAULT, run): symbol not found - 含义