mxnet:Optimizer rescale_grad

博客主要讲述MXNet优化器初始化的问题。在梯度反传时,使用随机梯度下降等方法需对batch_size的梯度求和求平均,涉及参数rescale_grad,其值应为1/batch_size,但optimizer中默认值为1,训练易发散。手动初始化和module.fit初始化该参数有差异,手动初始化需设为正确值或交给module.fit。

今天挖了个坑,关于优化器的初始化。

优化器的初始化函数:

create_optimizer

在梯度反传的时候,我们用随机梯度下降等优化方法的时候,需要对一个batch_size的梯度求和然后求平均再反传。

这个就涉及到一个参数:rescale_grad。

这个参数的作用就是对梯度进行求平均,按道理应该是(实际也是)rescale_grad=1/batch_size。

但是在optimizer中,初始化的这个值是默认1的,所以在训练的时候就容易发散。

当我们直接调用model.fit的时候,fit.py对于有没有手动初始化优化器有两个选择。当手动初始化的时候,也就是自己在fit之外初始化了优化器,那优化器的参数是手动设置的或者就是按照init函数里面的。如果没有手动初始化,那fit.py则会自己初始化一些参数。

这其中的最大区别就是,rescale_grad的初始化,手动默认的为1,而fit中的为正确的1/batch_size。

所以,这个在手动初始化的时候千万记得设置为正确的值。或者就不要自己初始化,交给module.fit就好。

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值