在某些情况下,不需要求出当前张量对所有产生该张量的叶子节点的梯度,这时可以使用torch.autograd.grad()函数。
torch.autograd.grad( outputs, # 计算图的数据结果张量--它就是需要进行求导的函数 inputs, # 需要对计算图求导的张量--它是进行求导的变量 grad_outputs=None, # 如果outputs不是标量,需要使用此参数 retain_graph=None, # 保留计算图 create_graph=None, # 创建计算图 )
示例:
>>> import torch >>> import torch.autograd >>> x = torch.randn(3, 3, requires_grad = True) >>> y = x.pow(2) >>> z = 2*x >>> f = 3*y+z
>>> gradients = torch.ones_like(f) >>> torch.autograd.grad(f, y, gradients, retain_graph=True) # f对y求导 (tensor([[3., 3., 3.], [3., 3., 3.], [3., 3., 3.]]),)
这里的gradients的用法就是相当于backward函数中的grad_tensors。可参考这篇https://www.cnblogs.com/xxmrecord/p/15130853.html