torch.autograd.gradcheck.gradcheck#
- torch.autograd.gradcheck.gradcheck(func, inputs, *, eps=1e-06, atol=1e-05, rtol=0.001, raise_exception=True, nondet_tol=0.0, check_undefined_grad=True, check_grad_dtypes=False, check_batched_grad=False, check_batched_forward_grad=False, check_forward_ad=False, check_backward_ad=True, fast_mode=False, masked=None)[原始碼]#
檢查透過有限差分計算的梯度與
inputs中是浮點或複數型別且requires_grad=True的張量的解析梯度是否一致。數值梯度和解析梯度之間的檢查使用
allclose()。對於我們為最佳化目的考慮的大多數複雜函式,不存在雅可比矩陣的概念。取而代之的是,gradcheck 驗證 Wirtinger 和共軛 Wirtinger 導數的數值和解析值是否一致。因為梯度計算是在假設整個函式具有實值輸出的條件下進行的,所以我們以特殊方式處理具有複數輸出的函式。對於這些函式,gradcheck 應用於兩個實值函式:第一個函式對應於取複數輸出的實部,第二個函式對應於取複數輸出的虛部。有關更多詳細資訊,請參閱 複數自動微分。
注意
預設值是為雙精度
input設計的。如果input的精度較低(例如,FloatTensor),此檢查很可能會失敗。注意
在非可微點上求值時,gradcheck 可能會失敗,因為透過有限差分計算的數值梯度可能與解析計算的梯度不同(不一定是因為其中一個不正確)。有關更多背景資訊,請參閱 非可微函式的梯度。
警告
如果
input中任何被檢查的張量具有重疊記憶體,即不同的索引指向相同的記憶體地址(例如,來自torch.Tensor.expand()),此檢查很可能會失敗,因為在這些索引上透過點擾動計算的數值梯度會改變共享相同記憶體地址的所有其他索引的值。- 引數
func (function) – 一個接受 Tensor 輸入並返回 Tensor 或 Tensor 元組的 Python 函式
eps (float, optional) – 有限差分的擾動
atol (float, optional) – 絕對容差
rtol (float, optional) – 相對容差
raise_exception (bool, optional) – 指示在檢查失敗時是否引發異常。異常提供了有關失敗確切性質的更多資訊。這在除錯 gradchecks 時非常有用。
nondet_tol (float, optional) – 非確定性容差。當使用相同的輸入執行微分時,結果必須完全匹配(預設值 0.0)或在此容差範圍內。
check_undefined_grad (bool, optional) – 如果為
True,則檢查是否支援未定義的輸出梯度,並將其視為零,用於Tensor輸出。check_batched_grad (bool, optional) – 如果為
True,則檢查是否可以使用原型的 vmap 支援來計算批處理梯度。預設為 False。check_batched_forward_grad (bool, optional) – 如果為
True,則檢查是否可以使用前向 AD 和原型的 vmap 支援來計算批處理前向梯度。預設為False。check_forward_ad (bool, optional) – 如果為
True,則檢查使用前向模式 AD 計算的梯度是否與數值梯度匹配。預設為False。check_backward_ad (bool, optional) – 如果為
False,則不執行任何依賴於後向模式 AD 實現的檢查。預設為True。fast_mode (bool, optional) – gradcheck 和 gradgradcheck 的快速模式目前僅針對 R 到 R 函式實現。如果輸入和輸出都不是複數,則執行一個更快的 gradcheck 實現,該實現不再計算整個雅可比矩陣;否則,將回退到慢速實現。
masked (bool, optional) – 如果為
True,則忽略稀疏張量中未指定元素的梯度。預設為False。
- 返回
如果所有差異都滿足 allclose 條件,則為
True- 返回型別