add removed api files.

This commit is contained in:
zhangyi 2021-12-04 09:42:36 +08:00
parent 4f1968a829
commit 8f2457a0f8
5 changed files with 475 additions and 0 deletions

View File

@ -0,0 +1,84 @@
mindspore.nn.Adagrad
=====================
.. py:class:: mindspore.nn.Adagrad(*args, **kwargs)
使用ApplyAdagrad算子实现Adagrad算法。
Adagrad用于在线学习和随机优化。
请参阅论文`Efficient Learning using Forward-Backward Splitting <https://proceedings.neurips.cc/paper/2009/file/621bf66ddb7c962aa0d22ac97d69b793-Paper.pdf>`_
公式如下:
.. math::
\begin{array}{ll} \\
h_{t+1} = h_{t} + g\\
w_{t+1} = w_{t} - lr*\frac{1}{\sqrt{h_{t+1}}}*g
\end{array}
:math:`h` 表示梯度平方的累积和,:math:`g` 表示 `grads`
:math:`lr` 代表 `learning_rate`:math:`w` 代表 `params`
.. note::
在参数未分组时,优化器配置的 `weight_decay` 应用于名称含有"beta"或"gamma"的网络参数,通过网络参数分组可调整权重衰减策略。分组时,每组网络参数均可配置 `weight_decay` ,若未配置,则该组网络参数使用优化器中配置的 `weight_decay`
**参数:**
- **params** (Union[list[Parameter], list[dict]]) - 必须是 `Parameter` 组成的列表或字典组成的列表。当列表元素是字典时,字典的键可以是"params"、"lr"、"weight_decay"、"grad_centralization"和"order_params"
.. include:: mindspore.nn.optim_group_param.rst
.. include:: mindspore.nn.optim_group_lr.rst
.. include:: mindspore.nn.optim_group_weight_decay.rst
.. include:: mindspore.nn.optim_group_gc.rst
.. include:: mindspore.nn.optim_group_order.rst
- **accum** (float) - 累加器 :math:`h` 的初始值必须大于等于零。默认值0.1。
- **learning_rate** (Union[float, Tensor, Iterable, LearningRateSchedule]) - 默认值0.001。
.. include:: mindspore.nn.optim_arg_dynamic_lr.rst
- **update_slots** (bool) - 如果为True则更新累加器 :math:`h` 。默认值True。
.. include:: mindspore.nn.optim_arg_loss_scale.rst
- **weight_decay** (Union[float, int]) - 要乘以权重的权重衰减值必须大于等于0.0。默认值0.0。
**输入:**
**grads** (tuple[Tensor]) - 优化器中 `params` 的梯度形状shape`params` 相同。
**输出:**
Tensor[bool]值为True。
**异常:**
- **TypeError** - `learning_rate` 不是int、float、Tensor、Iterable或 `LearningRateSchedule`
- **TypeError** - `parameters` 的元素是 `Parameter` 或字典。
- **TypeError** - `accum``loss_scale` 不是float。
- **TypeError** - `update_slots` 不是bool。
- **TypeError** - `weight_decay` 不是float或int。
- **ValueError** - `loss_scale` 小于或等于0。
- **ValueError** - `accum``weight_decay` 小于0。
**支持平台:**
``Ascend`` ``CPU`` ``GPU``
**样例:**
>>> net = Net()
>>> #1) 所有参数使用相同的学习率和权重衰减
>>> optim = nn.Adagrad(params=net.trainable_params())
>>>
>>> #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.Adagrad(group_params, learning_rate=0.1, 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)

View File

@ -0,0 +1,94 @@
mindspore.nn.Adam
==================
.. py:class:: mindspore.nn.Adam(*args, **kwargs)
通过Adaptive Moment Estimation (Adam)算法更新梯度。
请参阅论文`Adam: A Method for Stochastic Optimization <https://arxiv.org/abs/1412.6980>`_
公式如下:
.. math::
\begin{array}{ll} \\
m_{t+1} = \beta_1 * m_{t} + (1 - \beta_1) * g \\
v_{t+1} = \beta_2 * v_{t} + (1 - \beta_2) * g * g \\
l = \alpha * \frac{\sqrt{1-\beta_2^t}}{1-\beta_1^t} \\
w_{t+1} = w_{t} - l * \frac{m_{t+1}}{\sqrt{v_{t+1}} + \epsilon}
\end{array}
:math:`m` 代表第一个动量矩阵 `moment1` :math:`v` 代表第二个动量矩阵 `moment2` :math:`g` 代表 `gradients` :math:`l` 代表缩放因子,:math:`\beta_1,\beta_2` 代表 `beta1``beta2` :math:`t` 代表当前step:math:`beta_1^t`:math:`beta_2^t` 代表 `beta1_power``beta2_power` :math:`\alpha` 代表 `learning_rate` :math:`w` 代表 `params` :math:`\epsilon` 代表 `eps`
.. note::
.. include:: mindspore.nn.optim_note_sparse.rst
.. include:: mindspore.nn.optim_note_weight_decay.rst
**参数:**
- **params** (Union[list[Parameter], list[dict]]) - 必须是 `Parameter` 组成的列表或字典组成的列表。当列表元素是字典时,字典的键可以是"params"、"lr"、"weight_decay"、"grad_centralization"和"order_params"
.. include:: mindspore.nn.optim_group_param.rst
.. include:: mindspore.nn.optim_group_lr.rst
.. include:: mindspore.nn.optim_group_weight_decay.rst
.. include:: mindspore.nn.optim_group_gc.rst
.. include:: mindspore.nn.optim_group_order.rst
- **learning_rate** (Union[float, Tensor, Iterable, LearningRateSchedule]): 默认值1e-3。
.. include:: mindspore.nn.optim_arg_dynamic_lr.rst
- **beta1** (float) - `moment1` 的指数衰减率。参数范围0.0,1.0。默认值0.9。
- **beta2** (float) - `moment2` 的指数衰减率。参数范围0.0,1.0。默认值0.999。
- **eps** (float) - 将添加到分母中以提高数值稳定性。必须大于0。默认值1e-8。
- **use_locking** (bool) - 是否对参数更新加锁保护。如果为True`w``m``v` 的tensor更新将受到锁的保护。如果为False则结果不可预测。默认值False。
- **use_nesterov** (bool) - 是否使用Nesterov Accelerated Gradient (NAG)算法更新梯度。如果为True使用NAG更新梯度。如果为False则在不使用NAG的情况下更新梯度。默认值False。
- **weight_decay** (float) - 权重衰减L2 penalty。必须大于等于0。默认值0.0。
.. include:: mindspore.nn.optim_arg_loss_scale.rst
**输入:**
**gradients** (tuple[Tensor]) - `params` 的梯度形状shape`params` 相同。
**输出:**
Tensor[bool]值为True。
**异常:**
- **TypeError** - `learning_rate` 不是int、float、Tensor、Iterable或LearningRateSchedule。
- **TypeError** - `parameters` 的元素不是Parameter或字典。
- **TypeError** - `beta1``beta2``eps``loss_scale` 不是float。
- **TypeError** - `weight_decay` 不是float或int。
- **TypeError** - `use_locking``use_nesterov` 不是bool。
- **ValueError** - `loss_scale``eps` 小于或等于0。
- **ValueError** - `beta1``beta2` 不在0.0,1.0)范围内。
- **ValueError** - `weight_decay` 小于0。
**支持平台:**
``Ascend`` ``GPU`` ``CPU``
**样例:**
>>> net = Net()
>>> #1) 所有参数使用相同的学习率和权重衰减
>>> optim = nn.Adam(params=net.trainable_params())
>>>
>>> #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.Adam(group_params, learning_rate=0.1, 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)
.. include:: mindspore.nn.optim_target_unique_for_sparse.rst

View File

@ -0,0 +1,76 @@
mindspore.nn.Metric
====================
.. py:class:: mindspore.nn.Metric
用于计算评估指标的基类。
在计算评估指标时需要调用 `clear``update``eval` 三个方法,在继承该类自定义评估指标时,也需要实现这三个方法。其中,`update` 用于计算中间过程的内部结果,`eval` 用于计算最终评估结果,`clear` 用于重置中间结果。
请勿直接使用该类,需使用子类如 :class:`mindspore.nn.MAE`:class:`mindspore.nn.Recall` 等。
.. py:method:: clear()
:abstract:
描述了清除内部评估结果的行为。
.. note::
所有子类都必须重写此接口。
.. py:method:: eval()
:abstract:
描述了计算最终评估结果的行为。
.. note::
所有子类都必须重写此接口。
.. py:method:: indexes
:property:
获取当前的 `indexes` 值。默认为None调用 `set_indexes` 可修改 `indexes` 值。
.. py:method:: set_indexes(indexes)
该接口用于重排 `update` 的输入。
给定(label0, label1, logits)作为 `update` 的输入,将 `indexes` 设置为[2, 1],则最终使用(logits, label1)作为 `update` 的真实输入。
.. note::
在继承该类自定义评估函数时,需要用装饰器 `mindspore.nn.rearrange_inputs` 修饰 `update` 方法,否则配置的 `indexes` 值不生效。
**参数:**
**indexes** (List(int)) - logits和标签的目标顺序。
**输出:**
:class:`Metric` ,类实例本身。
**样例:**
>>> import numpy as np
>>> from mindspore import nn, Tensor
>>>
>>> x = Tensor(np.array([[0.2, 0.5], [0.3, 0.1], [0.9, 0.6]]))
>>> y = Tensor(np.array([1, 0, 1]))
>>> y2 = Tensor(np.array([0, 0, 1]))
>>> metric = nn.Accuracy('classification').set_indexes([0, 2])
>>> metric.clear()
>>> # indexes为[0, 2]使用x作为预测值y2作为真实标签
>>> metric.update(x, y, y2)
>>> accuracy = metric.eval()
>>> print(accuracy)
0.3333333333333333
.. py:method:: update(*inputs)
:abstract:
描述了更新内部评估结果的行为。
.. note::
所有子类都必须重写此接口。
**参数:**
**inputs** - 可变长度输入参数列表。通常是预测值和对应的真实标签。

View File

@ -0,0 +1,89 @@
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::
.. include:: mindspore.nn.optim_note_weight_decay.rst
**参数:**
- **params** (Union[list[Parameter], list[dict]]): 必须是 `Parameter` 组成的列表或字典组成的列表。当列表元素是字典时,字典的键可以是"params"、"lr"、"weight_decay"、"grad_centralization"和"order_params"
.. include:: mindspore.nn.optim_group_param.rst
.. include:: mindspore.nn.optim_group_lr.rst
.. include:: mindspore.nn.optim_group_weight_decay.rst
.. include:: mindspore.nn.optim_group_gc.rst
.. include:: mindspore.nn.optim_group_order.rst
- **learning_rate** (Union[float, int, Tensor, Iterable, LearningRateSchedule]):
.. include:: mindspore.nn.optim_arg_dynamic_lr.rst
- **momentum** (float) - 浮点数类型的超参表示移动平均的动量。必须等于或大于0.0。
- **weight_decay** (int, float) - 权重衰减L2 penalty值。必须大于等于0.0。默认值0.0。
.. include:: mindspore.nn.optim_arg_loss_scale.rst
- **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)

View File

@ -0,0 +1,132 @@
mindspore.nn.Optimizer
======================
.. py:class:: mindspore.nn.Optimizer(learning_rate, parameters, weight_decay=0.0, loss_scale=1.0)
用于参数更新的优化器基类。不要直接使用这个类,请实例化它的一个子类。
优化器支持参数分组。当参数分组时,每组参数均可配置不同的学习率(`lr` )、权重衰减(`weight_decay`)和梯度中心化(`grad_centralization`)策略。
.. note::
.. include:: mindspore.nn.optim_note_weight_decay.rst
**参数:**
- **learning_rate** (Union[float, int, Tensor, Iterable, LearningRateSchedule]):
.. include:: mindspore.nn.optim_arg_dynamic_lr.rst
- **parameters (Union[list[Parameter], list[dict]])** - 必须是 `Parameter` 组成的列表或字典组成的列表。当列表元素是字典时,字典的键可以是"params"、"lr"、"weight_decay"、"grad_centralization"和"order_params"
.. include:: mindspore.nn.optim_group_param.rst
.. include:: mindspore.nn.optim_group_lr.rst
.. include:: mindspore.nn.optim_group_weight_decay.rst
.. include:: mindspore.nn.optim_group_gc.rst
.. include:: mindspore.nn.optim_group_order.rst
- **weight_decay** (Union[float, int]) - 权重衰减的整数或浮点值。必须等于或大于0。如果 `weight_decay` 是整数它将被转换为浮点数。默认值0.0。
.. include:: mindspore.nn.optim_arg_loss_scale.rst
**异常:**
- **TypeError** - `learning_rate` 不是int、float、Tensor、Iterable或LearningRateSchedule。
- **TypeError** - `parameters` 的元素不是Parameter或字典。
- **TypeError** - `loss_scale` 不是float。
- **TypeError** - `weight_decay` 不是float或int。
- **ValueError** - `loss_scale` 小于或等于0。
- **ValueError** - `weight_decay` 小于0。
- **ValueError** - `learning_rate` 是一个Tensor但是Tensor的维度大于1。
**支持平台:**
``Ascend`` ``GPU`` ``CPU``
.. py:method:: broadcast_params(optim_result)
按参数组的顺序进行参数广播。
**参数:**
**optim_result** (bool) - 参数更新结果。该输入用来保证参数更新完成后才执行参数广播。
**返回:**
bool状态标志。
.. py:method:: decay_weight(gradients)
衰减权重。
一种减少深度学习神经网络模型过拟合的方法。继承 :class:`mindspore.nn.Optimizer` 自定义优化器时,可调用该接口进行权重衰减。
**参数:**
**gradients** (tuple[Tensor]) - 网络参数的梯度形状shape与网络参数相同。
**返回:**
tuple[Tensor],衰减权重后的梯度。
.. py:method:: get_lr()
优化器调用该接口获取当前步骤step的学习率。继承 :class:`mindspore.nn.Optimizer` 自定义优化器时,可在参数更新前调用该接口获取学习率。
**返回:**
float当前步骤的学习率。
.. py:method:: get_lr_parameter(param)
用于在使用网络参数分组功能,且为不同组别配置不同的学习率时,获取指定参数的学习率。
**参数:**
**param** (Union[Parameter, list[Parameter]]) - `Parameter``Parameter` 列表。
**返回:**
Parameter单个 `Parameter``Parameter` 列表。如果使用了动态学习率,返回用于计算学习率的 `LearningRateSchedule``LearningRateSchedule` 列表。
**样例:**
>>> from mindspore import nn
>>> net = Net()
>>> 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, 'lr': 0.05},
... {'params': no_conv_params, 'lr': 0.01}]
>>> optim = nn.Momentum(group_params, learning_rate=0.1, momentum=0.9, weight_decay=0.0)
>>> conv_lr = optim.get_lr_parameter(conv_params)
>>> print(conv_lr[0].asnumpy())
0.05
.. py:method:: gradients_centralization(gradients)
梯度中心化。
一种优化卷积层参数以提高深度学习神经网络模型训练速度的方法。继承 :class:`mindspore.nn.Optimizer` 自定义优化器时,可调用该接口进行梯度中心化。
**参数:**
**gradients** (tuple[Tensor]) - 网络参数的梯度形状shape与网络参数相同。
**返回:**
tuple[Tensor],梯度中心化后的梯度。
.. py:method:: scale_grad(gradients)
用于在混合精度场景还原梯度。
继承 :class:`mindspore.nn.Optimizer` 自定义优化器时,可调用该接口还原梯度。
**参数:**
**gradients** (tuple[Tensor]) - 网络参数的梯度形状shape与网络参数相同。
**返回:**
tuple[Tensor],还原后的梯度。
.. include:: mindspore.nn.optim_target_unique_for_sparse.rst