下面介绍了在pytorch中如何进行梯度运算,并介绍了在运行梯度计算时遇到的问题,通过解决一个个问题,来深入理解梯度计算。
梯度计算
import torch
x = torch.rand(3,4,requires_grad=True)
b = torch.rand(4,3,requires_grad=True)
print(x,b)
y = x@b
t = y.sum()
求导数
t.backward()
x.grad
问题1:
让y运行backward方法
y.backward()
会报错
RuntimeError: grad can be implicitly created only for scalar outputs
为什么会这样呢?
因为y为是多维张量,在pytorch中不允许张量对张量求导,只允许标量对张量求导。正如上面粒子,x为3x4矩阵,b为4x3矩阵,x与b矩阵相乘,得到3x3的矩阵y,如果对y求导,那么x的导数该怎么求呢