check_grad#
- scipy.optimize.check_grad(func, grad, x0, *args, epsilon=1.4901161193847656e-08, direction='all', rng=None)[原始碼]#
透過將梯度函數與梯度的(前向)有限差分近似值進行比較,來檢查梯度函數的正確性。
- 參數:
- funccallable
func(x0, *args)
要檢查其導數的函數。
- gradcallable
grad(x0, *args)
func 的 Jacobian 矩陣。
- x0ndarray
用於檢查 grad 相對於使用 func 的 grad 前向差分近似值的點。
- args\*args, optional
傳遞給 func 和 grad 的額外參數。
- epsilonfloat, optional
用於有限差分近似的步長大小。預設值為
sqrt(np.finfo(float).eps)
,約為 1.49e-08。- directionstr, optional
如果設定為
'random'
,則沿著隨機向量的梯度會用於檢查 grad 相對於使用 func 的前向差分近似值。預設值為'all'
,在這種情況下,會考慮所有 one-hot 方向向量來檢查 grad。如果 func 是向量值函數,則只能使用'all'
。- rng{None, int,
numpy.random.Generator
}, optional 如果 rng 通過關鍵字傳遞,則除了
numpy.random.Generator
之外的類型會傳遞給numpy.random.default_rng
以實例化Generator
。 如果 rng 已經是Generator
實例,則會使用提供的實例。指定 rng 以獲得可重複的函數行為。如果此參數是通過位置傳遞或 seed 是通過關鍵字傳遞,則參數 seed 的舊版行為適用
如果 seed 為 None(或
numpy.random
),則使用numpy.random.RandomState
單例模式。如果 seed 是一個整數,則會使用新的
RandomState
實例,並使用 seed 作為種子。如果 seed 已經是
Generator
或RandomState
實例,則會使用該實例。
在版本 1.15.0 中變更: 作為從使用
numpy.random.RandomState
過渡到numpy.random.Generator
的 SPEC-007 轉換的一部分,此關鍵字已從 seed 變更為 rng。在過渡期間,這兩個關鍵字將繼續運作,但一次只能指定一個。在過渡期之後,使用 seed 關鍵字的函數呼叫將發出警告。 seed 和 rng 的行為都在上面概述,但在新程式碼中應僅使用 rng 關鍵字。產生的隨機數會影響計算梯度以檢查
grad
的隨機向量。請注意,僅當 direction 參數設定為 ‘random’ 時,才會使用 rng。
- funccallable
- 返回:
- errfloat
grad(x0, *args)
與在點 x0 使用 func 的 grad 的有限差分近似值之間差異的平方和的平方根(即 2-範數)。
範例
>>> import numpy as np >>> def func(x): ... return x[0]**2 - 0.5 * x[1]**3 >>> def grad(x): ... return [2 * x[0], -1.5 * x[1]**2] >>> from scipy.optimize import check_grad >>> check_grad(func, grad, [1.5, -1.5]) 2.9802322387695312e-08 # may vary >>> rng = np.random.default_rng() >>> check_grad(func, grad, [1.5, -1.5], ... direction='random', seed=rng) 2.9802322387695312e-08