評價此頁

torch.Tensor.backward#

Tensor.backward(gradient=None, retain_graph=None, create_graph=False, inputs=None)[原始碼]#

計算當前張量相對於圖葉的梯度。

該圖使用鏈式法則進行區分。如果張量是非標量(即其資料包含多個元素)並且需要梯度,則該函式還需要指定一個 gradient。它應該是與 self 具有匹配型別和形狀的張量,代表被微分函式相對於 self 的梯度。

此函式會累積葉節點的梯度 — 您可能需要在呼叫它之前將 .grad 屬性歸零或將其設定為 None。有關累積梯度的記憶體佈局的詳細資訊,請參閱 預設梯度佈局

注意

如果您在使用者指定的 CUDA 流上下文中執行任何前向操作、建立 gradient 以及/或呼叫 backward,請參閱 反向傳播的流語義

注意

當提供了 inputs 並且給定的輸入不是葉節點時,當前實現將呼叫其 grad_fn(儘管為了獲得該梯度,這並不是嚴格必需的)。這是一個使用者不應依賴的實現細節。有關更多詳細資訊,請參閱 pytorch/pytorch#60521

引數
  • gradient (Tensor, optional) – 被微分函式相對於 self 的梯度。如果 self 是標量,則可以省略此引數。預設為 None

  • retain_graph (bool, optional) – 如果為 False,則用於計算梯度的圖將被釋放;如果為 True,則將被保留。預設為 None,在這種情況下,該值是從 create_graph 推斷的(即,只有在請求更高階導數跟蹤時才會保留圖)。請注意,在幾乎所有情況下,將此選項設定為 True 都是不必要的,並且通常可以透過更有效的方式解決。

  • create_graph (bool, optional) – 如果為 True,將構建導數的圖,從而能夠計算更高階的導數積。預設為 False

  • inputs (Sequence[Tensor], optional) – 將在其上將梯度累積到 .grad 中的輸入。所有其他張量將被忽略。如果未提供,則梯度將累積到用於計算 tensors 的所有葉張量中。預設為 None