Module
nn.BNReLU2d
源码:
|
|
nn.BatchNorm2d
|
|
torch.nn.BatchNorm2
类如上面源码所示,该类具体实现部分基本上都来自继承_BatchNorm
这个内部类,而后者类里面具体实现不是用python
实现的,而是用c++、cuda
实现的,这里我就不具体分析底层源码了。
下面分析这个类功能:
这篇论文中Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift提出了BN层。首先该类的输入为小批量带通道的二维输入,也就是输入的大小为(N,C,H,W)
。对输入的数据做如下公式的变换:
$$
y = \frac{x - \mathrm{E}[x]}{ \sqrt{\mathrm{Var}[x] + \epsilon}} * \gamma + \beta
$$
平均值和标准差是按小批量的每个维度计算,$\gamma$和$\beta$为通道维度上的可学习的参数向量,默认情况下,$\gamma$为1,$\beta$为0。