mindspore.ops.ApplyGradientDescent

class mindspore.ops.ApplyGradientDescent[源代码]

通过从 var 中减去 alpha * delta 来更新 var

\[var = var - \alpha * \delta\]

其中 \(\alpha\) 代表 alpha\(\delta\) 代表 delta

vardelta 的输入遵循隐式类型转换规则,使数据类型一致。如果它们具有不同的数据类型,则低精度数据类型将转换为相对最高精度数据类型。

输入:
  • var (Parameter) - 要更新的变量,为任意维度,其数据类型为float32或float16。其shape为 \((N, *)\) ,其中 \(*\) 为任意数量的额外维度。

  • alpha (Union[Number, Tensor]) - 调节系数,必须是Scalar。数据类型为float32或float16。

  • delta (Tensor) - 变化的Tensor,shape与 var 相同。

输出:

Tensor,更新后的 var

异常:
  • TypeError - 如果 varalpha 的数据类型既不是float16也不是float32。

  • TypeError - 如果 delta 不是Tensor。

  • TypeError - 如果 alpha 既不是数值型也不是Tensor。

  • TypeError - 如果不支持 vardelta 数据类型转换。

支持平台:

Ascend GPU CPU

样例:

>>> import numpy as np
>>> from mindspore import Tensor, nn, ops, Parameter
>>> class Net(nn.Cell):
...     def __init__(self):
...         super(Net, self).__init__()
...         self.apply_gradient_descent = ops.ApplyGradientDescent()
...         self.var = Parameter(Tensor(np.ones([2, 2]).astype(np.float32)), name="var")
...         self.alpha = 0.001
...     def construct(self, delta):
...         out = self.apply_gradient_descent(self.var, self.alpha, delta)
...         return out
...
>>> net = Net()
>>> delta = Tensor(np.array([[0.1, 0.1], [0.1, 0.1]]).astype(np.float32))
>>> output = net(delta)
>>> print(output)
[[0.9999 0.9999]
 [0.9999 0.9999]]