mindspore.scipy.optimize.line_search
- mindspore.scipy.optimize.line_search(f, xk, pk, jac=None, gfk=None, old_fval=None, old_old_fval=None, c1=1e-4, c2=0.9, maxiter=20)[源代码]
满足强Wolfe条件的非精确线搜索。
来自Wright和Nocedal,'Numerical Optimization',1999,第59-61页,算法3.5章节。
说明
Windows平台上还不支持 line_search。
- 参数:
f (function) - 形式为f(x)的函数,其中x是一个扁平Tensor,并返回一个实数标量。 该函数应该由 vjp 定义的算子组成。
xk (Tensor) - 初始猜测。
pk (Tensor) - 要搜索的方向。假定方向是下降方向。
jac (function) - 求x处的梯度的函数,其中x是一个扁平的Tensor,函数返回一个Tensor。 如果要使用自动微分,则可以传
None
。gfk (Tensor) - value_and_gradient 作为位置的初始值。默认值:
None
。old_fval (Tensor) - 同 gfk。默认值:
None
。old_old_fval (Tensor) - 未使用的参数,仅用于scipy API合规性。默认值:
None
。c1 (float) - Wolfe准则常量,参见ref。默认值:
1e-4
。c2 (float) - 与 c1 相同。默认值:
0.9
。maxiter (int) - 搜索的最大迭代次数。默认值:
20
。
- 返回:
线搜索的结果。
- 支持平台:
GPU
CPU
样例:
>>> import numpy as onp >>> from mindspore.scipy.optimize import line_search >>> from mindspore import Tensor >>> x0 = Tensor(onp.ones(2).astype(onp.float32)) >>> p0 = Tensor(onp.array([-1, -1]).astype(onp.float32)) >>> def func(x): ... return x[0] ** 2 - x[1] ** 3 >>> res = line_search(func, x0, p0) >>> print(res.a_k) 1.0