mindspore.ops.InsertGradientOf
- class mindspore.ops.InsertGradientOf(f)[源代码]
为图节点附加回调函数,将在梯度计算时被调用。
参数:
f (Function) - MindSpore Function。回调函数。
输入:
input_x (Any) - 需要附加回调函数的图节点。
输出:
Tensor,直接返回输入 input_x 。该算子不影响前向计算的结果。
异常:
TypeError - f 不是MindSpore Function。
- 支持平台:
Ascend
GPU
CPU
样例:
>>> import numpy as np >>> from mindspore import Tensor, ops, ms_function >>> a = Tensor(np.array([1.0]).astype(np.float32)) >>> b = Tensor(np.array([0.2]).astype(np.float32)) >>> def clip_gradient(dx): ... ret = dx ... if ret > a: ... ret = a ... ... if ret < b: ... ret = b ... ... return ret ... >>> clip = ops.InsertGradientOf(clip_gradient) >>> grad_all = ops.GradOperation(get_all=True) >>> def InsertGradientOfClipDemo(): ... def clip_test(x, y): ... x = clip(x) ... y = clip(y) ... c = x * y ... return c ... ... @ms_function ... def f(x, y): ... return clip_test(x, y) ... ... def fd(x, y): ... return grad_all(clip_test)(x, y) ... ... print("forward: ", f(Tensor(np.array([1.1]).astype(np.float32)), ... Tensor(np.array([0.1]).astype(np.float32)))) ... print("clip_gradient:", fd(Tensor(np.array([1.1]).astype(np.float32)), ... Tensor(np.array([0.1]).astype(np.float32)))) >>> InsertGradientOfClipDemo() forward: [0.11000001] clip_gradient: (Tensor(shape=[1], dtype=Float32, value= [ 2.00000003e-01]), Tensor(shape=[1], dtype=Float32, value= [ 1.00000000e+00]))