学习时候发现了有的网络结构中将BN作为单独的一层进行设计,因此学习了一下BN。
1. Batch normalization理解
BN可以作为激活层之前一层,将输入数据进行标准化,

BN计算公式如下:

其中,E[x]为均值,sqrt(var)为标准差,可知BN层的输出其实是将输入的数据标准化成为均值为0方差为1的正态分布。
这样做的原因呢?
这里我们假设使用sigmoid函数作为网络激活函数:

可见,如果激活层的输入数据是标准分布的话,激活层能够有更好的效果,
那么如果输入层数据没有进行BN标准话,假设其均值为7,方差为2的正态分布,那么sigmoid函数就无法有效的区分数据,出现梯度消失问题。
同时,将数据标准化,还可以帮助网络加速收敛。
更多BN参考:https://www.cnblogs.com/guoyaohua/p/8724433.html
2. pytorch中的BN BatchNorm2d()
我们知道BN可以将数据进行标准化,但是我们有的时候并不需要完全标准化的数据分布,因此可以将标准化的数据进行一定的线性变化,BatchNorm2d()数学原理如下:

其中γ与β是可以学习的系数矩阵。
BatchNorm2d()作为神经网络的一层,拥有一下参数:
BatchNorm2d()内部的参数如下:
1.num_features:一般输入参数为batch_size*num_features*height*width,即为其中特征的数量
2.eps:分母中添加的一个值,目的是为了计算的稳定性,默认为:1e-5
3.momentum:期望和方差的更新参数,与动量梯度下降法类似,期望和方差的更新公式:

为模型的均值或方差,
为当前观测值的均值或方差,
为更新后的均值或方差,momentum为更新参数。
4.affine:当设为true时,会给定可以学习的系数矩阵gamma和beta
更多关于BatchNorm2d()参考:
https://blog.youkuaiyun.com/bigFatCat_Tom/article/details/91619977
https://blog.youkuaiyun.com/algorithmPro/article/details/103982466

本文深入探讨了批量归一化(Batch Normalization,BN)在神经网络中的应用,解释了BN如何通过标准化输入数据改善网络性能,防止梯度消失,并加速训练过程。此外,还详细介绍了PyTorch中BatchNorm2d()函数的使用方法及其参数设置。
1674

被折叠的 条评论
为什么被折叠?



