mindspore.ops.LARSUpdate

class mindspore.ops.LARSUpdate(epsilon=1e-05, hyperpara=0.001, use_clip=False)[源代码]

对梯度的平方和应用LARS(layer-wise adaptive rate scaling)算法。

更多细节请参考 mindspore.nn.LARS

参数:
  • epsilon (float,可选) - 添加在分母中,提高数值稳定性。默认值: 1e-05

  • hyperpara (float,可选) - 计算局部学习率的信任系数。默认值: 0.001

  • use_clip (bool,可选) - 计算局部学习速率时是否裁剪。默认值: False

输入:
  • weight (Tensor) - 权重Tensor,shape: \((N, *)\) ,其中 \(*\) 表示任意数量的附加维度。

  • gradient (Tensor) - weight 的梯度,与 weight 的shape和数据类型相同。

  • norm_weight (Tensor) - 标量Tensor,权重的平方和。

  • norm_gradient (Tensor) - 标量Tensor,梯度的平方和。

  • weight_decay (Union[Number, Tensor]) - 衰减率。必须为标量Tensor或Number。

  • learning_rate (Union[Number, Tensor]) - 学习率。必须为标量Tensor或Number。

输出:

Tensor,计算后的梯度。

异常:
  • TypeError - epsilonhyperpara 不是float类型。

  • TypeError - use_clip 不是bool类型。

  • TypeError - weightgradientnorm_weightnorm_gradient 不是Tensor。

  • TypeError - weight_decaylearning_rate 非Number或Tensor。

  • TypeError - gradientweight 的shape不同。

支持平台:

Ascend

样例:

>>> import numpy as np
>>> from mindspore import Tensor, nn, ops
>>> class Net(nn.Cell):
...     def __init__(self):
...         super(Net, self).__init__()
...         self.lars = ops.LARSUpdate()
...         self.reduce = ops.ReduceSum()
...         self.square = ops.Square()
...     def construct(self, weight, gradient):
...         w_square_sum = self.reduce(self.square(weight))
...         grad_square_sum = self.reduce(self.square(gradient))
...         grad_t = self.lars(weight, gradient, w_square_sum, grad_square_sum, 0.0, 1.0)
...         return grad_t
...
>>> weight = Tensor(np.array([[0.5, 0.8, 0.2], [0.6, 0.4, 0.2]]).astype(np.float32))
>>> gradient = Tensor(np.array([[0.4, 0.4, 0.5], [0.2, 0.4, 0.3]]).astype(np.float32))
>>> net = Net()
>>> output = net(Tensor(weight), Tensor(gradient))
>>> print(output)
[[0.0005265  0.0005265 0.00065813]
 [0.00026325 0.0005265 0.00039488]]