mindspore.jvp

mindspore.jvp(fn, inputs, v, has_aux=False)[源代码]

计算给定网络的雅可比向量积(Jacobian-vector product, JVP)。JVP的计算过程可参考 前向模式自动微分

参数:
  • fn (Union[Function, Cell]) - 待求导的函数或网络。以Tensor为入参,返回Tensor或Tensor数组。

  • inputs (Union[Tensor, tuple[Tensor], list[Tensor]]) - 输入网络 fn 的入参。

  • v (Union[Tensor, tuple[Tensor], list[Tensor]]) - 与雅可比矩阵相乘的向量,shape和type与网络的输入一致。

  • has_aux (bool) - 若 has_auxTrue ,只有 fn 的第一个输出参与 fn 的求导,其他输出将直接返回。此时, fn 的输出数量必须超过一个。默认值: False

返回:
  • net_output (Union[Tensor, tuple[Tensor]]) - 输入网络的正向计算结果。

  • jvp (Union[Tensor, tuple[Tensor]]) - 雅可比向量积的结果。

  • aux_value (Union[Tensor, tuple[Tensor]], 可选) - 若 has_auxTrue ,才返回 aux_valueaux_valuefn(inputs) 的第一个除外的其他输出,且不参与 fn 的求导。

异常:
  • TypeError - inputsv 类型不符合要求。

支持平台:

Ascend GPU CPU

样例:

>>> import numpy as np
>>> from mindspore import jvp
>>> from mindspore import Tensor
>>> import mindspore.nn as nn
>>> class Net(nn.Cell):
...     def construct(self, x, y):
...         return x**3 + y
>>> x = Tensor(np.array([[1, 2], [3, 4]]).astype(np.float32))
>>> y = Tensor(np.array([[1, 2], [3, 4]]).astype(np.float32))
>>> v = Tensor(np.array([[1, 1], [1, 1]]).astype(np.float32))
>>> output = jvp(Net(), (x, y), (v, v))
>>> print(output[0])
[[ 2. 10.]
 [30. 68.]]
>>> print(output[1])
[[ 4. 13.]
 [28. 49.]]
>>>
>>> def fn(x, y):
...     return x ** 3 + y, y
>>> output, jvp_out, aux = jvp(fn, (x, y), (v, v), has_aux=True)
>>> print(output)
[[ 2. 10.]
 [30. 68.]]
>>> print(jvp_out)
[[ 4. 13.]
 [28. 49.]]
>>> print(aux)
[[ 1. 2.]
 [3. 4.]]