【MindSpore易点通】调优精度之低阶API使用静态LossScale

背景信息

在混合精度中,使用float16类型来替代float32类型存储数据,从而达到减少内存和提高计算速度的效果。但是由于float16类型要比float32类型表示的范围小很多,所以当某些参数(比如说梯度)在训练过程中变得很小时,就会发生数据下溢的情况。LossScale的主要思想是在计算loss时,将loss扩大一定的倍数,由于链式法则的存在,梯度也会相应扩大,然后在优化器更新权重时再缩小相应的倍数,从而避免了数据下溢的情况又不影响计算结果;而使用静态LossScale则是静态缩放更新网络,使用固定的loss scale值;在低阶模型中实现静态loss scale功能时,通常结合TrainOneStepWithLossScaleCell来实现。

在MindSpore中,loss scale的使用方法又分动态loss scale和静态loss scale两种,二者具体区别详见静态LossScale和动态LossScale的区别。

1、示例代码段

**步骤:**在使用静态LossScale功能前,首先要定义一张网络、损失函数、优化器,然后将损失函数融入到神经网络中,再使用静态LossScale功能

from src.new import TrainOneStepWithLossScaleCell

# Define the loss function
    loss_function = nn.loss.SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean')

    # Define the optimizer
    opt = nn.SGD(net.trainable_params(), LR_ORI, MOMENTUM_ORI, WEIGHT_DECAY)

    # Bind loss_function to net
    model_constructed = BuildTrainNetwork(net, loss_function, TRAIN_BATCH_SIZE, CLASS_NUM)

    # Define the Dynamic Loss scale update cell
    loss_scale_manager = nn.FixedLossScaleUpdateCell(loss_scale_value=2**12)

    # Define Network training with loss scaling
    model_constructed = TrainOneStepWithLossScaleCell(network=model_constructed, optimizer=opt, scale_sense=loss_scale_manager)

    # Train
    train_net(model_constructed, net, loss_function, EPOCH_MAX, TRAIN_PATH, VAL_PATH, TRAIN_BATCH_SIZE, VAL_BATCH_SIZE, REPEAT_SIZE)

2、代码解析

loss_scale_manager = nn.FixedLossScaleUpdateCell(loss_scale_value=2**12)

接口作用:静态scale更新网络,loss scaling 值将不会被更新。

参数详解:

loss_scale_value :表示初始化的LossScale,float数据类型;

model_constructed = TrainOneStepWithLossScaleCell(network=model_constructed, optimizer=opt, scale_sense=loss_scale_manager)

功能::定义一个静态LossScale的模型控制器,它将网络、优化器和可能的scale 更新网络作为参数。

接口参数详解:

network:为训练网络,只支持单一输出;

optimizer:为用户更新权重的优化器;

scale_sense:为更新逻辑单元。其可为Cell类型或Tensor类型;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值