常規的神經網絡連接結構如下

當網絡訓練完成, 在推導的時候為了加速運算, 通常將卷積層和 batch-norm 層融合, 原理如下
\[\begin{align*} y_{conv} &= w \cdot x + b \\ y_{bn} &= \gamma \cdot \left (\frac{y_{conv} - E[x]}{\sqrt{Var[x] + \epsilon}} \right)+\beta \\ &= \gamma \cdot \left (\frac{wx+b - E[x]}{\sqrt{ Var[x] + \epsilon}} \right)+\beta \\ \hat w &= \frac{\gamma}{\sqrt{Var[x] + \epsilon}}\cdot w \\ \hat b &= \frac{\gamma}{\sqrt{Var[x] + \epsilon}}\cdot \left({b - E[x]} \right)+\beta \\ y_{bn} &= \hat w \cdot x + \hat b \\ \end{align*} \]
推導時, E[x] 為 runnin_mean(滑動均值), Var[x] 為 running_var(滑動方差),
pytorch 的 running_var 存儲的是方差, 而不是標准差
caffe 中的 conv-bn-scale-relu 結構

caffe模型的轉化可以參考pvanet的卷積層和 batch-norm融合代碼