快捷方式

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) – 一個接受 Tensor 輸入並返回 Tensor 或 Tensor 元組的 Python 函式

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

  • grad_outputs (tuple of TensorTensor, 可選) – 相對於函式輸出的梯度。

  • eps (float, 可選) – 用於有限差分的擾動

  • atol (float, 可選) – 絕對容差

  • rtol (float, 可選) – 相對容差

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

  • raise_exception (bool, 可選) – 指示檢查失敗時是否丟擲異常。異常會提供關於失敗確切性質的更多資訊。這在除錯 gradcheck 時很有幫助。

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

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

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

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

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

返回值

如果所有差異都滿足 allclose 條件,則為 True

返回型別

bool

文件

訪問 PyTorch 的全面開發者文件

檢視文件

教程

獲取面向初學者和高階開發者的深入教程

檢視教程

資源

查詢開發資源並獲得解答

檢視資源