mindspore.nn.LARS

查看源文件
class mindspore.nn.LARS(optimizer, epsilon=1e-05, coefficient=0.001, use_clip=False, lars_filter=lambda x: ...)[源代码]

LARS算法的实现。

LARS算法采用大量的优化技术。详见论文 LARGE BATCH TRAINING OF CONVOLUTIONAL NETWORKS

更新公式如下:

Parameters:base learning rate γ0, momentum m, weight decay λ, LARS coefficient η, number of steps TInit: t=0, v=0, init weight w0l for each layer lwhile t<T for each layer l dogtlL(wtl)γtγ0(1tT)2γlηwtlgtl+λwtl(compute the local LR γl)vt+1lmvtl+γt+1γl(gtl+λwtl)wt+1lwtlvt+1l end while 

w 表示网络中的param,g 表示 gradientst 表示当前step,λ 表示 optimizer 配置的 weight_decayγ 表示 optimizer 配置的 learning_rateη 表示 coefficient

参数:
  • optimizer (mindspore.nn.Optimizer) - 待封装和修改梯度的MindSpore优化器。

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

  • coefficient (float) - 计算局部学习速率的信任系数。默认值: 0.001

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

  • lars_filter (Function) - 用于指定使用LARS算法的网络参数。默认值: lambda x: 'LayerNorm' not in x.name and 'bias' not in x.name

输入:
  • gradients (tuple[Tensor]) - 优化器中 params 的梯度,shape与优化器中的 params 相同。

支持平台:

Ascend

样例:

>>> import mindspore as ms
>>> from mindspore import nn
>>>
>>> # Define the network structure of LeNet5. Refer to
>>> # https://gitee.com/mindspore/docs/blob/master/docs/mindspore/code/lenet.py
>>> net = LeNet5()
>>> loss = nn.SoftmaxCrossEntropyWithLogits()
>>> opt = nn.Momentum(net.trainable_params(), 0.1, 0.9)
>>> opt_lars = nn.LARS(opt, epsilon=1e-08, coefficient=0.02)
>>> model = ms.train.Model(net, loss_fn=loss, optimizer=opt_lars, metrics=None)