mindspore.ops.vjp

mindspore.ops.vjp(fn, inputs, v)[源代码]

计算给定网络的向量雅可比积(vector-jacobian-product, VJP)。VJP对应 反向模式自动微分

Note

此接口未來会变动。

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

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

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

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

  • vjp (Union[NoneType, int, tuple[int]]) - 向量雅可比积的结果。

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

支持平台:

Ascend GPU CPU

样例:

>>> from mindspore import ops
>>> from mindspore import Tensor
>>> 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 = ops.vjp(Net(), (x, y), v)
>>> print(output[0])
[[ 2. 10.]
 [30. 68.]]
>>> print(output[1])
(Tensor(shape=[2, 2], dtype=Float32, value=
[[ 3.00000000e+00,  1.20000000e+01],
 [ 2.70000000e+01,  4.80000000e+01]]), Tensor(shape=[2, 2], dtype=Float32, value=
[[ 1.00000000e+00,  1.00000000e+00],
 [ 1.00000000e+00,  1.00000000e+00]]))