1. 程式人生 > >pytorch中batch normalisation的注意事項

pytorch中batch normalisation的注意事項

torch中的各種批歸一的注意事項,不間斷更新20180402

含有batchnorm的網路其train和eval時效果差距大

  1. 和是否zero_grad及其位置關係不大,因為這個錯了,train是多半不收斂的。
  2. 主要是因為BN的輸入隨著訓練的進行是時變的,非穩態的,除非訓練完全收斂,且學習率很小,並進行了多個batch的訓練,此時的running mean 和running var才會收斂到正確的值。
  3. 如果BN的動量為0.1, 那麼需要多訓練的batch數我認為至少是20,即0.9**20=0.1214,也就是說20個batch前的訓練資料在running mean和var中所佔比重約十分之一。
  4. 建議:當需要用eval運作網路時,最好先以train模式進行多個batch的前向傳播,用於穩定running mean和var。

torch.nn.BatchNorm2d

  1. 輸入4D的矩陣,NxCxHxW
  2. C維度取Ci時可計算得到MEANi和VERi,分別是改通道對應的均值和方差
  3. 可見該批歸一化過程是通道間獨立的。
  4. 所以,如果batch中N=1也是可以正常運作的,這點區別於最早的批歸一文章。