mindspore.ops.SGD

class mindspore.ops.SGD(dampening=0.0, weight_decay=0.0, nesterov=False)[源代码]

计算随机梯度下降。动量为可选。

Nesterov动量基于论文 On the importance of initialization and momentum in deep learning 里的公式。

Note

有关更多详细信息,请参阅: mindspore.nn.SGD

参数:

  • dampening (float) - 动量的抑制因子。默认值:0.0。

  • weight_decay (float) - 权重衰减系数(L2惩罚)。默认值:0.0。

  • nesterov (bool) - 是否启用Nesterov动量。默认值:False。

输入:

  • parameters (Tensor) - 待更新的参数。数据类型为float16或float32。

  • gradient (Tensor) - 梯度,数据类型为float16或float32。

  • learning_rate (Tensor) - 学习率,是一个Scalar的Tensor,数据类型为float16或float32。例如Tensor(0.1, mindspore.float32)。

  • accum (Tensor) - 待更新的累加器(速度)。数据类型为float16或float32。

  • momentum (Tensor) - 动量,是一个Scalar的Tensor,数据类型为float16或float32。例如Tensor(0.1, mindspore.float32)。

  • stat (Tensor) - 待更新的状态,其shape与梯度相同,数据类型为float16或float32。

输出:

Tensor,更新后的参数。

异常:

  • TypeError - dampeningweight_decay 不是float。

  • TypeError - nesterov 不是bool。

  • TypeError - parametersgradientlearning_rateaccummomentumstat 不是Tensor。

  • TypeError - parametersgradientlearning_rateaccummomentumstat 的数据类型既不是float16也不是float32。

支持平台:

Ascend GPU CPU

样例:

>>> sgd = ops.SGD()
>>> parameters = Tensor(np.array([2, -0.5, 1.7, 4]), mindspore.float32)
>>> gradient = Tensor(np.array([1, -1, 0.5, 2]), mindspore.float32)
>>> learning_rate = Tensor(0.01, mindspore.float32)
>>> accum = Tensor(np.array([0.1, 0.3, -0.2, -0.1]), mindspore.float32)
>>> momentum = Tensor(0.1, mindspore.float32)
>>> stat = Tensor(np.array([1.5, -0.3, 0.2, -0.7]), mindspore.float32)
>>> output = sgd(parameters, gradient, learning_rate, accum, momentum, stat)
>>> print(output)
(Tensor(shape=[4], dtype=Float32,
 value= [ 1.98989999e+00, -4.90300000e-01,  1.69520009e+00,  3.98009992e+00]),)