評價此頁

torch.autograd.gradcheck.gradgradcheck#

torch.autograd.gradcheck.gradgradcheck(func, inputs, grad_outputs=None, *, eps=1e-06, atol=1e-05, rtol=0.001, gen_non_contig_grad_outputs=False, raise_exception=True, nondet_tol=0.0, check_undefined_grad=True, check_grad_dtypes=False, check_batched_grad=False, check_fwd_over_rev=False, check_rev_over_rev=True, fast_mode=False, masked=False)[原始碼]#

使用有限小擾動法檢查相對於 inputsgrad_outputs 的梯度(這些梯度是浮點數或複數型別且 requires_grad=True)的二階導數是否與解析梯度相符。

此函式檢查透過計算給定的 grad_outputs 的梯度進行反向傳播是否正確。

數值梯度與解析梯度之間的比較使用 allclose()

注意

預設值是為雙精度 inputgrad_outputs 設計的。如果它們的精度較低(例如 FloatTensor),此檢查很可能會失敗。

警告

如果 inputgrad_outputs 中的任何一個被檢查的張量具有重疊記憶體,即不同的索引指向相同的記憶體地址(例如,來自 torch.Tensor.expand()),此檢查很可能會失敗,因為在這些索引處的數值梯度透過點擾動計算時會改變共享相同記憶體地址的所有其他索引的值。

引數
  • func (function) – 一個 Python 函式,它接受 Tensor 輸入並返回一個 Tensor 或一個 Tensor 元組

  • inputs (tuple of Tensor or Tensor) – 函式的輸入

  • grad_outputs (tuple of Tensor or Tensor, optional) – 相對於函式輸出的梯度。

  • eps (float, optional) – 有限差分的擾動

  • atol (float, optional) – 絕對容差

  • rtol (float, optional) – 相對容差

  • gen_non_contig_grad_outputs (bool, optional) – 如果 grad_outputsNonegen_non_contig_grad_outputsTrue,則隨機生成的梯度輸出將被設定為非連續的。

  • raise_exception (bool, optional) – 指示在檢查失敗時是否引發異常。異常提供了有關失敗確切性質的更多資訊。這在除錯 gradchecks 時很有用。

  • nondet_tol (float, optional) – 非確定性容差。當對相同的輸入執行微分時,結果必須完全匹配(預設值 0.0)或在此容差範圍內。請注意,梯度中少量的非確定性會導致二階導數出現更大的誤差。

  • check_undefined_grad (bool, optional) – 如果為 True,則檢查是否支援未定義的輸出梯度並將其視為零。

  • check_batched_grad (bool, optional) – 如果為 True,則檢查我們是否可以使用原型 vmap 支援來計算批處理梯度。預設為 False。

  • fast_mode (bool, optional) – 如果為 True,則執行 gradgradcheck 的一個更快實現,該實現不再計算整個雅可比矩陣。

  • masked (bool, optional) – 如果為 True,則忽略稀疏張量中未指定元素的梯度(預設值為 False)。

返回

如果所有差值都滿足 allclose 條件,則返回 True。

返回型別

布林值