卷积神经网络基础---批量归一化(BN层、 Batch Normalization)

原文链接:https://blog.csdn.net/weixin_43972154/article/details/120199833

1. BN层的作用
BN层使得神经网络能够设定较高的初始学习率,加速模型收敛过程;
将数据进行归一化处理,即在网络的每一层输入的时候,插入了一个归一化层,然后再进入网络的下一层。这样能提高网络的泛化能力,使得网络能够使用误差更小的L2损失函数。
为什么要将数据进行归一化处理?
因为一旦训练数据与测试数据的分布不同,网络的泛化能力就会大大降低;此外,一旦每批训练数据的分布各不相同,那么网络就要在每次迭代都去学习适应不同的分布,这样将会大大降低网络的训练速度。

2. 源码
m = K.mean(X, axis=-1, keepdims=True) //计算均值
std = K.std(X, axis=-1, keepdims=True) //计算标准差
X_normed = (X - m) / (std + self.epsilon) //归一化
out = self.gamma * X_normed + self.beta //重构变换


3. 在超分辨率处理过程中BN层的缺点
神经网络最后重建的SR图像在色彩、对比度、亮度上要求和输入一致,改变的仅仅是分辨率和一些像素细节。但是任何图像经过BN层后,其色彩的分布都会被归一化。也就是说,它破坏了图像原本的对比度信息,因此BN层的加入会影响SR的结果,导致不可预测的伪影。
但是在ResNet使用了BN层,这是因为ResNet中引入了一种叫残差网络结构,其和普通的CNN的区别在于从输入源直接向输出源多连接了一条传递线来来进行残差计算。在ResNet网络中,图像的对比度信息可以通过跳转连接直接传递,所以也就不必担心BN层的破坏。

posted @ 2024-04-11 23:27  yinghualeihenmei  阅读(125)  评论(0编辑  收藏  举报