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)[原始碼][原始碼]¶
檢查透過小幅度有限差分 (small finite differences) 計算出的梯度之梯度,與相對於
inputs
和grad_outputs
中具有浮點數或複數類型,且requires_grad=True
之 tensors 的解析梯度 (analytical gradients) 是否一致。此函式檢查透過計算給定
grad_outputs
的梯度進行反向傳播是否正確。數值梯度和解析梯度之間的檢查使用
allclose()
。注意
預設值是為雙精度 (double precision) 的
input
和grad_outputs
所設計的。 如果它們的精度較低,例如FloatTensor
,此檢查很可能會失敗。警告
如果
input
和grad_outputs
中任何被檢查的 tensor 具有重疊的記憶體,即指向相同記憶體位址的不同索引(例如,來自torch.Tensor.expand()
),則此檢查很可能會失敗,因為通過在這些索引處的點擾動 (point perturbation) 計算出的數值梯度將更改共享相同記憶體位址的所有其他索引處的值。- 參數
func (function) – 一個 Python 函式,它接受 Tensor 輸入並返回一個 Tensor 或一個 Tensors 的 tuple
grad_outputs (tuple of Tensor 或 Tensor, optional) – 相對於函式輸出的梯度。
eps (float, optional) – 用於有限差分的擾動 (perturbation)
atol (float, optional) – 絕對容忍度 (absolute tolerance)
rtol (float, optional) – 相對容忍度 (relative tolerance)
gen_non_contig_grad_outputs (bool, optional) – 如果
grad_outputs
為None
且gen_non_contig_grad_outputs
為True
,則隨機產生的梯度輸出將被設置為非連續 (noncontiguous)raise_exception (bool, optional) – 指示如果檢查失敗是否引發異常。 該異常提供了有關失敗的確切性質的更多資訊。 這在調試 gradchecks 時很有用。
nondet_tol (float, optional) – 不確定性的容忍度 (tolerance for non-determinism)。 當通過微分運行相同的輸入時,結果必須完全匹配(預設值,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
- 回傳類型