例子:
x = torch.tensor([1, 2, 3], dtype=torch.float,requires_grad=True)
y = 2*x
y.backward() # 报错
报错信息:【梯度 只能为标量隐式创建】
RuntimeError: grad can be implicitly created only for scalar outputs
由于y是向量, 即
向量 不能直接 求梯度。
但是 可以 求 vector-Jacobian product :
v = torch.tensor([1, 1, 1], dtype=torch.float)
y.backward(v)
x.grad
输出: tensor([2., 2., 2.])
雅各布矩阵:
, 向量对向量求导为 Jacobian matrix(雅各布矩阵)
假设向量为 对的导数为, 则