merge_bn 合并bn层到conv或FC层原理介绍及代码实现
参考文献:http://blog.****.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层进行数据处理的过程
原文推导有误,本文推导如下:
代码: