批归一化BatchNorm:用于在深度神经网络中(浅层神经网络只需要输入数据归一化即可),提升数值的稳定性
- 从而加速学习过程(使用较大学习率)
- 降低模型对初始值的敏感度
- 并在一定程度上抑制过拟合
import paddle
import paddle.fluid as fluid
from paddle.fluid.dygraph.nn import Conv2D,BatchNorm
from paddle.fluid.initializer import NumpyArrayInitializer
import numpy as np
w = np.array([[3,3,3],[1,1,1],[3,3,3]],dtype='float32')
with fluid.dygraph.guard():
bn = BatchNorm(num_channels=3)
x = fluid.dygraph.to_variable(w)
y = bn(x)
print(y)
输出值:
name tmp_1, dtype: VarType.FP32 shape: [3, 3] lod: {}
dim: 3, 3
layout: NCHW
dtype: float
data: [0.707103 0.707103 0.707103 -1.41421 -1.41421 -1.41421 0.707103 0.707103 0.707103]
用Numpy计算BatchNorm的结果:
BatchNorm计算过程
PaddlePaddle的BatchNorm计算结果跟Numpy有细微差别是因为PaddlePaddle的BatchNorm在计算时,加入了一个小项epsilon.
模型中若有BatchNorm层,则在预测时,直接加载训练时保存的均值和方差,而不使用预测样本的均值和方差
网友评论