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)[源][源]¶
透過微小的有限差分計算的二階梯度,與
inputs和grad_outputs中浮點或複數型別且requires_grad=True的張量的解析梯度進行對比檢查。此函式檢查透過計算得到的相對於給定
grad_outputs的梯度進行反向傳播是否正確。數值梯度和解析梯度之間的檢查使用
allclose()。注意
預設值是為雙精度
input和grad_outputs設計的。如果它們的精度較低,例如FloatTensor,此檢查很可能會失敗。警告
如果
input和grad_outputs中任何被檢查的張量具有記憶體重疊,即不同索引指向同一記憶體地址(例如,透過torch.Tensor.expand()),則此檢查很可能會失敗,因為在此類索引處透過點擾動計算的數值梯度會改變共享同一記憶體地址的所有其他索引處的值。- 引數
func (function) – 一個接受 Tensor 輸入並返回 Tensor 或 Tensor 元組的 Python 函式
eps (float, 可選) – 用於有限差分的擾動
atol (float, 可選) – 絕對容差
rtol (float, 可選) – 相對容差
gen_non_contig_grad_outputs (bool, 可選) – 如果
grad_outputs是None且gen_non_contig_grad_outputs是True,則隨機生成的梯度輸出將被設定為非連續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
- 返回型別