mindspore.get_grad
- mindspore.get_grad(gradients, identifier)[源代码]
当
mindspore.grad()
或mindspore.value_and_grad()
的 return_ids 参数设置为True
时,将 mindspore.grad 的返回值,或 mindspore.value_and_grad 的第二个返回值作为 gradients 。再根据 identifier 在 gradients 中找到对应的梯度值。根据 identifier 查找梯度值包含以下两种场景:
identifier 为指定求导输入位置的索引;
identifier 为网络变量。
- 参数:
gradients (Union[tuple[int, Tensor], tuple[tuple, tuple]]) -
mindspore.grad()
参数 return_ids 为True时的返回值。identifier (Union[int, Parameter]) - 指定求导输入位置的索引或者在
mindspore.grad()
中被使用的网络变量。
- 返回:
identifier 所指定的求导输入位置的索引所对应的Tensor的梯度值,或者网络变量所对应的Tensor的梯度值。
- 异常:
RuntimeError - 无法找到identifier所对应的梯度值。
TypeError - 入参类型不符合要求。
- 支持平台:
Ascend
GPU
CPU
样例:
>>> import mindspore >>> from mindspore import Tensor, nn >>> from mindspore import grad, get_grad >>> >>> # Cell object to be differentiated >>> class Net(nn.Cell): ... def construct(self, x, y, z): ... return x * y * z >>> x = Tensor([1, 2], mindspore.float32) >>> y = Tensor([-2, 3], mindspore.float32) >>> z = Tensor([0, 3], mindspore.float32) >>> net = Net() >>> out_grad = grad(net, grad_position=(1, 2), return_ids=True)(x, y, z) >>> output = get_grad(out_grad, 1) >>> print(output) [0. 6.]