mindspore.ops.InsertGradientOf
- class mindspore.ops.InsertGradientOf(f)[source]
Attaches callback to the graph node that will be invoked on the node’s gradient.
- Parameters
f (Function) – MindSpore’s Function. Callback function.
- Inputs:
input_x (Any) - The graph node to attach to.
- Outputs:
Tensor, returns input_x directly. InsertGradientOf does not affect the forward result.
- Raises
TypeError – If f is not a function of MindSpore.
- Supported Platforms:
Ascend
GPU
CPU
Examples
>>> import numpy as np >>> from mindspore import Tensor, ops, jit >>> 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 ... ... @jit ... 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]))