scipy.optimize.
check_grad#
- scipy.optimize.check_grad(func, grad, x0, *args, epsilon=np.float64(1.4901161193847656e-08), direction='all', seed=None)[source]#
通过将梯度函数与其梯度的(前向)有限差分近似值进行比较来检查梯度函数的正确性。
- 参数:
- func可调用
func(x0, *args)
要检查其导数的函数。
- grad可调用
grad(x0, *args)
func 的雅可比矩阵。
- x0ndarray
使用 func 检查 grad 相对于 grad 的前向差分近似值时要检查的点。
- args*args,可选
传递给 func 和 grad 的其他参数。
- epsilonfloat,可选
用于有限差分近似的步长。其默认值为
sqrt(np.finfo(float).eps)
,大约为 1.49e-08。- directionstr,可选
如果设置为
'random'
,则沿随机向量的梯度将用于利用 grad 检查有限差分近似,同时使用 func。其默认值为'all'
,在这种情况下,将考虑所有独热方向向量来检查 grad。如果 func 是向量函数,则只能使用'all'
。- seed{None、int、
numpy.random.Generator
、numpy.random.RandomState
},可选 如果 seed 为 None(或 np.random),则将使用
numpy.random.RandomState
单例。如果 seed 为 int,则将使用播下 seed 种子的新RandomState
实例。如果 seed 已经是Generator
或RandomState
实例,则将使用此实例。指定 seed 以重现此函数的返回值。使用此种子生成的随机数将影响计算梯度以检查grad
时所依据的随机向量。请注意,仅当 direction 参数设置为 ‘random’ 时,才使用 seed。
- func可调用
- 返回:
- errfloat
由
grad(x0, *args)
与使用 func 在点 x0 处计算的 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