mindspore.ops.jet
- mindspore.ops.jet(fn, primals, series)[源代码]
计算函数或网络输出对输入的高阶微分。给定待求导函数的原始输入和自定义的1到n阶导数,将返回函数输出对输入的第1到n阶导数。一般情况,建议输入的1阶导数值为全1,更高阶的导数值为全0,这与输入对本身的导数情况是一致的。
Note
若 primals 是int型的Tensor,会被转化成float32格式进行计算。
- 参数:
fn (Union[Cell, function]) - 待求导的函数或网络。
primals (Union[Tensor, tuple[Tensor]]) - fn 的输入,单输入的type为Tensor,多输入的type为Tensor组成的tuple。
series (Union[Tensor, tuple[Tensor]]) - 输入的原始第1到第n阶导数。若为tuple则长度与数据类型应与 primals 一致。type与 primals 相同,Tensor第一维度i对应输出对输入的第1到第i+1阶导数。
- 返回:
tuple,由 out_primals 和 out_series 组成。
out_primals (Union[Tensor, list[Tensor]]) - fn(primals) 的结果。
out_series (Union[Tensor, list[Tensor]]) - fn 输出对输入的第1到n阶导数。
- 异常:
TypeError - primals 不是Tensor或tuple。
TypeError - primals 和 series 的type不一致。
- 支持平台:
Ascend
GPU
CPU
样例:
>>> import numpy as np >>> import mindspore.nn as nn >>> import mindspore as ms >>> import mindspore.ops as P >>> from mindspore import Tensor >>> from mindspore.ops.functional import jet >>> ms.set_context(mode=ms.GRAPH_MODE) >>> class Net(nn.Cell): ... def __init__(self): ... super().__init__() ... self.sin = P.Sin() ... self.exp = P.Exp() ... def construct(self, x): ... out1 = self.sin(x) ... out2 = self.exp(out1) ... return out2 >>> primals = Tensor(np.array([[1, 2], [3, 4]]).astype(np.float32)) >>> series = Tensor(np.array([[[1, 1], [1, 1]], [[0, 0], [0, 0]], [[0, 0], [0, 0]]]).astype(np.float32)) >>> net = Net() >>> out_primals, out_series = jet(net, primals, series) >>> print(out_primals, out_series) [[2.319777 2.4825778] [1.1515628 0.4691642]] [[[ 1.2533808 -1.0331168 ] [-1.1400385 -0.3066662 ]] [[-1.2748207 -1.8274734 ] [ 0.966121 0.55551505]] [[-4.0515366 3.6724353 ] [ 0.5053504 -0.52061415]]]