check_grad#
- scipy.optimize.check_grad(func, grad, x0, *args, epsilon=np.float64(1.4901161193847656e-08), direction='all', rng=None)[源码]#
通过将梯度函数与梯度的(前向)有限差分近似进行比较,检查其正确性。
- 参数:
- func可调用对象
func(x0, *args)
要检查其导数的函数。
- grad可调用对象
grad(x0, *args)
func 的雅可比矩阵。
- x0ndarray
检查 grad 与使用 func 计算的梯度前向差分近似的点。
- args\*args,可选
传递给 func 和 grad 的额外参数。
- epsilon浮点数,可选
用于有限差分近似的步长。它默认为
sqrt(np.finfo(float).eps)
,约等于 1.49e-08。- direction字符串,可选
如果设置为
'random'
,则使用沿随机向量的梯度来检查 grad 与使用 func 的前向差分近似。默认情况下为'all'
,此时,所有独热方向向量都用于检查 grad。如果 func 是一个向量值函数,则只能使用'all'
。- rng{None, 整数,
numpy.random.Generator
},可选 如果 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 版本修改: 作为 SPEC-007 从使用
numpy.random.RandomState
过渡到numpy.random.Generator
的一部分,此关键字从 seed 更改为 rng。在过渡期间,这两个关键字将继续有效,但一次只能指定一个。过渡期结束后,使用 seed 关键字的函数调用将发出警告。seed 和 rng 的行为如上所述,但新代码中应只使用 rng 关键字。生成的随机数会影响计算梯度以检查
grad
的随机向量。请注意,rng 仅在 direction 参数设置为 ‘random’ 时使用。
- func可调用对象
- 返回:
- err浮点数
在点 x0 处,
grad(x0, *args)
与使用 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