1. 程式人生 > >mxnet:Optimizer rescale_grad

mxnet:Optimizer rescale_grad

今天挖了個坑,關於優化器的初始化。

優化器的初始化函式:

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就好。