merge_bn 合并bn层到conv或FC层原理介绍及代码实现

参考文献:http://blog.****.net/diye2008/article/details/78492181

1.bn合并的必要性:

   bn层即batch-norm层,一般是深度学习中用于加速训练速度和一种方法,一般放置在卷积层(conv层)或者全连接层之后,将数据归一化并加速了训练拟合速度。但是bn层虽然在深度学习模型训练时起到了一定的积极作用,但是在预测时因为凭空多了一些层,影响了整体的计算速度并占用了更多内存或者显存空间。所以我们设想如果能将bn层合并到相邻的卷积层或者全连接层之后就好了,于是就有了这篇文章所提到的工作。


2.bn合并本身的数学原理:

               bn层一般在神经网络中‘所处的位置如下图所示:

merge_bn 合并bn层到conv或FC层原理介绍及代码实现

如上图可以看到,bn层的位置一般在conv(or Fc)层的后面,也有一些情况bn在conv(or Fc)层的前面。我们先来两种情况分别来考虑。


       2.1 bn层在conv层之后的情形

         bn合并的原理,可以由下两张图所示

merge_bn 合并bn层到conv或FC层原理介绍及代码实现                                      bn层进行数据处理的过程

             原文推导有误,本文推导如下:

merge_bn 合并bn层到conv或FC层原理介绍及代码实现

代码:

https://github.com/chuanqi305/MobileNet-SSD

merge_bn.py