mindspore.get_grad

mindspore.get_grad(gradients, identifier)[源代码]

mindspore.grad()mindspore.value_and_grad()return_ids 参数设置为 True 时,将 mindspore.grad 的返回值,或 mindspore.value_and_grad 的第二个返回值作为 gradients 。再根据 identifiergradients 中找到对应的梯度值。

根据 identifier 查找梯度值包含以下两种场景:

  1. identifier 为指定求导输入位置的索引;

  2. 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.]