PyTorch中的autograd模块是实现自动求导的核心模块。其中,autograd.grad()和autograd.backward()都可以实现输入张量对某个标量值进行求导,但是它们在实现上有所不同。
autograd.grad()函数主要用于求出变量的梯度,它的返回值是一个向量,即各个变量的梯度。该函数需要指定求导的自变量和结果变量,而且只能对标量值求导。
下面是一个示例代码,展示了如何使用autograd.grad()函数求解张量对某个标量的梯度:
import torch
x = torch.tensor([1., 2., 3.], requires_grad=True)
y = x.pow(2).sum()
grad_x = torch.autograd.grad(y, x)
print(grad_x)
上面的代码中,x是需要求导的张量,y是结果变量,grad_x是x对y的梯度向量。
autograd.backward()函数就比较灵活,它可以求解任意形状的张量对标量进行求导。在函数调用时,需要将函数结果变量作为参数,然后通过backward()函数即可进行求导。该函数不需要返回值,而是直接在张量的requires_grad属性中更新梯度。
下面是一个示例代码,展示了如何使用autograd.backward()函数对任意张量进行求导:
import torch
x = torch.tensor([[1., 2., 3.], [4., 5., 6.]], requires_grad=True)
y = x.pow(2).sum()
y.backward()
print(x.grad)
上面的代码中,x是需要求导的张量,y是结果变量,y.backward()即可对x进行求导。其中,可以通过x.grad属性来获取x对结果变量的梯度。
上一篇:autograd.grad错误:似乎其中一个被区分的Tensor在计算图中没有被使用。
下一篇:autograd.hessian_vector_product和scipy.optimize.NonlinearConstraint存在的问题