1. 程式人生 > >merge_bn 合併bn層到conv或FC層原理介紹及程式碼實現

merge_bn 合併bn層到conv或FC層原理介紹及程式碼實現

參考文獻:http://blog.csdn.net/diye2008/article/details/78492181

1.bn合併的必要性:

   bn層即batch-norm層,一般是深度學習中用於加速訓練速度和一種方法,一般放置在卷積層(conv層)或者全連線層之後,將資料歸一化並加速了訓練擬合速度。但是bn層雖然在深度學習模型訓練時起到了一定的積極作用,但是在預測時因為憑空多了一些層,影響了整體的計算速度並佔用了更多記憶體或者視訊記憶體空間。所以我們設想如果能將bn層合併到相鄰的卷積層或者全連線層之後就好了,於是就有了這篇文章所提到的工作。

2.bn合併本身的數學原理:

               bn層一般在神經網路中‘所處的位置如下圖所示:


如上圖可以看到,bn層的位置一般在conv(or Fc)層的後面,也有一些情況bn在conv(or Fc)層的前面。我們先來兩種情況分別來考慮。

       2.1 bn層在conv層之後的情形

         bn合併的原理,可以由下兩張圖所示

                                      bn層進行資料處理的過程

             原文推導有誤,本文推導如下:


程式碼: