check_grad#
- scipy.optimize.check_grad(func, grad, x0, *args, epsilon=1.4901161193847656e-08, direction='all', rng=None)[源代码]#
通过将其与梯度的(前向)有限差分近似进行比较,来检查梯度函数的正确性。
- 参数:
- func可调用对象
func(x0, *args)
要检查其导数的函数。
- grad可调用对象
grad(x0, *args)
func 的雅可比矩阵。
- x0ndarray
使用 func 针对梯度的前向差分近似检查 grad 的点。
- args*args, 可选
传递给 func 和 grad 的额外参数。
- epsilonfloat,可选
用于有限差分近似的步长。 默认为
sqrt(np.finfo(float).eps)
,大约为 1.49e-08。- directionstr,可选
如果设置为
'random'
,则沿随机向量的梯度用于使用 func 针对前向差分近似检查 grad 。 默认情况下,它是'all'
,在这种情况下,将考虑所有 one hot 方向向量来检查 grad。 如果 func 是一个向量值函数,则只能使用'all'
。- rng{None, int,
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 是一个 int,则使用一个新的
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。
- 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