MindSpore调优精度之高阶API使用静态LossScale

背景信息

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

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

1、示例代码段

from mindspore import FixedLossScaleManager

#Define network
net = resnet()
#1) Drop the parameter update if there is an overflow
loss_scale_manager = FixedLossScaleManager()
optim = nn.Momentum(params=net.trainable_params(), learning_rate=0.1, momentum=0.9)
model = Model(net, loss_scale_manager=loss_scale_manager, optimizer=optim)

loss_scale_manager = FixedLossScaleManager(scale_factor=4, scale_window=3000)

net = Model(net, loss, opt, metrics=metrics, loss_scale_manager=loss_scale_manager)

#2) Execute parameter update even if overflow occurs

loss_scale_manager = FixedLossScaleManager(loss_scale = 1024,                                                                          drop_overflow_update=False)

optim = nn.Momentum(params=net.trainable_params(), learning_rate=0.1, momentum=0.9, loss_scale=loss_scale)

net = Model(net, loss, opt, metrics=metrics, loss_scale_manager=loss_scale_manager)

2、接口详解

loss_scale_manager = FixedLossScaleManager(loss_scale=1024, drop_overflow_update=True)

**接口功能:**定义一个静态LossScale的控制器,指定LossScale的固定值为loss_scale。在程序进行时,不会改变scale的大小,scale的值由入参loss_scale控制,可以由用户指定,若不指定则取默认值。FixedLossScaleManager中的另一个参数是drop_overflow_update用来控制发生溢出时是否更新参数。一般情况下loss scale功能不需要和优化器配合使用,但在使用FixedLossScaleManager时,如果drop_overflow_update为Flase,那么在优化器中需设置loss_scale的值,且loss_scale的值要与FixedLossScaleManager的相同。

参数详解

loss_scale:float数据类型。初始化的LossScale,默认值为128.0;

drop_overflow_update:bool类型。默认值为Truth;判断当出现数据溢出时是否执行优化器,如果选择True,则在数据溢出时优化器将不会执行。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值