在某些情況下,不需要求出當前張量對所有產生該張量的葉子節點的梯度,這時可以使用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