mindspore2022/docs/api/api_python/nn/mindspore.nn.Momentum.rst

91 lines
4.9 KiB
ReStructuredText
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

mindspore.nn.Momentum
======================
.. py:class:: mindspore.nn.Momentum(*args, **kwargs)
Momentum算法优化器。
有关更多详细信息,请参阅论文 `On the importance of initialization and momentum in deep learning <https://dl.acm.org/doi/10.5555/3042817.3043064>`_
.. math::
v_{t+1} = v_{t} \ast u + grad
如果 `use_nesterov` 为True
.. math::
p_{t+1} = p_{t} - (grad \ast lr + v_{t+1} \ast u \ast lr)
如果 `use_nesterov` 为False
.. math::
p_{t+1} = p_{t} - lr \ast v_{t+1}
其中,:math:`grad`:math:`lr`:math:`p`:math:`v`:math:`u` 分别表示梯度、学习率、参数、矩Moment和动量Momentum
.. note::
在参数未分组时,优化器配置的 `weight_decay` 应用于名称含有"beta"或"gamma"的网络参数,通过网络参数分组可调整权重衰减策略。分组时,每组网络参数均可配置 `weight_decay` ,若未配置,则该组网络参数使用优化器中配置的 `weight_decay`
**参数:**
- **params** (Union[list[Parameter], list[dict]]): 必须是 `Parameter` 组成的列表或字典组成的列表。当列表元素是字典时,字典的键可以是"params"、"lr"、"weight_decay"、"grad_centralization"和"order_params"
- ** params** - 必填。当前组别的权重,该值必须是 `Parameter` 列表。
- ** lr** - 可选。如果键中存在"lr",则使用对应的值作为学习率。如果没有,则使用优化器中配置的 `learning_rate` 作为学习率。
- ** weight_decay** - 可选。如果键中存在"weight_decay”则使用对应的值作为权重衰减值。如果没有则使用优化器中配置的 `weight_decay` 作为权重衰减值。
- ** grad_centralization** - 可选。如果键中存在"grad_centralization",则使用对应的值,该值必须为布尔类型。如果没有,则认为 `grad_centralization` 为False。该参数仅适用于卷积层。
- ** order_params** - 可选。对应值是预期的参数更新顺序。当使用参数分组功能时,通常使用该配置项保持 `parameters` 的顺序以提升性能。如果键中存在"order_params",则会忽略该组配置中的其他键。"order_params"中的参数必须在某一组 `params` 参数中。
- **learning_rate** (Union[float, int, Tensor, Iterable, LearningRateSchedule]):
- **float** - 固定的学习率。必须大于等于零。
- **int** - 固定的学习率。必须大于等于零。整数类型会被转换为浮点数。
- **Tensor** - 可以是标量或一维向量。标量是固定的学习率。一维向量是动态的学习率第i步将取向量中第i个值作为学习率。
- **Iterable** - 动态的学习率。第i步将取迭代器第i个值作为学习率。
- **LearningRateSchedule** - 动态的学习率。在训练过程中优化器将使用步数step作为输入调用 `LearningRateSchedule` 实例来计算当前学习率。
- **momentum** (float) - 浮点数类型的超参表示移动平均的动量。必须等于或大于0.0。
- **weight_decay** (int, float) - 权重衰减L2 penalty值。必须大于等于0.0。默认值0.0。
- **loss_scale** (float) - 梯度缩放系数必须大于0。如果 `loss_scale` 是整数,它将被转换为浮点数。通常使用默认值,仅当训练时使用了 `FixedLossScaleManager`,且 `FixedLossScaleManager``drop_overflow_update` 属性配置为False时此值需要与 `FixedLossScaleManager` 中的 `loss_scale` 相同。有关更多详细信息,请参阅 :class:`mindspore.FixedLossScaleManager` 。默认值1.0。
- **use_nesterov** (bool) - 是否使用Nesterov Accelerated Gradient (NAG)算法更新梯度。默认值False。
**输入:**
**gradients** (tuple[Tensor]) - `params` 的梯度形状shape`params` 相同。
**输出:**
tuple[bool]所有元素都为True。
**异常:**
- **TypeError** - `learning_rate` 不是int、float、Tensor、Iterable或LearningRateSchedule。
- **TypeError** - `parameters` 的元素不是 `Parameter` 或字典。
- **TypeError** - `loss_scale``momentum` 不是float。
- **TypeError** - `weight_decay` 不是float或int。
- **TypeError** - `use_nesterov` 不是bool。
- **ValueError** - `loss_scale` 小于或等于0。
- **ValueError** - `weight_decay``momentum` 小于0。
**支持平台:**
``Ascend`` ``GPU`` ``CPU``
**样例:**
>>> net = Net()
>>> #1) 所有参数使用相同的学习率和权重衰减
>>> optim = nn.Momentum(params=net.trainable_params(), learning_rate=0.1, momentum=0.9)
>>>
>>> #2) 使用参数分组并设置不同的值
>>> conv_params = list(filter(lambda x: 'conv' in x.name, net.trainable_params()))
>>> no_conv_params = list(filter(lambda x: 'conv' not in x.name, net.trainable_params()))
>>> group_params = [{'params': conv_params, 'weight_decay': 0.01, 'grad_centralization':True},
... {'params': no_conv_params, 'lr': 0.01},
... {'order_params': net.trainable_params()}]
>>> optim = nn.Momentum(group_params, learning_rate=0.1, momentum=0.9, weight_decay=0.0)
>>> # conv_params参数组将使用优化器中的学习率0.1、该组的权重衰减0.01、该组的梯度中心化配置True。
>>> # no_conv_params参数组将使用该组的学习率0.01、优化器中的权重衰减0.0、梯度中心化使用默认值False。
>>> # 优化器按照"order_params"配置的参数顺序更新参数。
>>>
>>> loss = nn.SoftmaxCrossEntropyWithLogits()
>>> model = Model(net, loss_fn=loss, optimizer=optim, metrics=None)