首页 > 编程知识 正文

转换层和避难层的区别,神经网络bn的作用

时间:2023-05-04 20:20:54 阅读:21412 作者:1335

BN层原理bn:batch归一化-批量归一化

其作用如下

加快网络训练和收敛速度梯度防止爆发防止梯度消失防止过拟合防止收敛速度:在深度神经网络中,如果每层数据分布不同,网络的收敛和训练会非常困难,但每层数据的平均值为零,而每层数据的平均值为零

防止坡度爆炸和坡度消失:

以sigmoid函数为例,sigmoid函数的输出在[ 0,1 ]之间,但实际上如果x通道有一定程度的大小,则经过sigmoid函数后的输出范围变得非常小

梯度消失:在深度神经网络中,网络激活输出越大,相应的梯度越小,网络学习速度越慢。 假设网络中每一层的学习梯度最大值小于0.25,且网络中有n层。 由于链式求导,第一层的坡度小于0.25的n次幂,所以学习速度相对较慢,但网络的最后一层需要引导自身,坡度大,学习速度就会加快。 结果,在深网络中,浅层几乎不学习,权重的变化变小。 另一方面,后面几层的网络一直在学习,后面的网络基本上可以代表整个网络。 那样的话,就会失去深度的意义。 (在BN层归一化时,网络输出不变大,梯度不变小)

梯度爆炸:第一层偏移量梯度=有源层梯度1x权重1x有源层梯度2x…有源层梯度(n-1 ) x权重) n-1 ) x有源层梯度n,如果有源层梯度最大值为0.25,则所有层权重为100,梯度为指数函数(使用bn层后的权重更新也不是很大)

使用BN算法防止过度拟合:在网络培训中,BN将关联一个minibatch中的所有样本。 因此,网络不会从一个训练样本中生成确定的结果。 这意味着相同样本的输出不仅取决于样本本身,还取决于与该样本属于同一batch的其他样本。 由于网络每次都是随机的batch,所以整个网络在这个方向上学习不强,在一定程度上避免了拟合。

代码是classnet(nn.module ) : def _ init _ (self ) :super ) net, 实现self ).__init__卷积self.conv1的主要参数是num_features,其数值为上一层深度nn.batchnorm2d(num_features,) 必须是track_res ) () self.bn1=nn.batchnorm2d(16 ) self.pool=nn.maxpool2d ) 2,2 ) self.con v2=nn . 3 ) self.bn2=nn.batchnorm2d(32 ) self.conV3=nn.conv2d ) 32,64,3 ) self.bn3=nn.batchnorm2d(64 ) self 1024 ) #作用于全部连接层的self.bn_F1=nn.batchnorm1d(1024 ) self.fc2=nn.linear (1024,256 ) self.bn _ F2=nn . x ) : x=self.pool (f.relu (self.con v1 ) x ) x=self.pool (f.relu ) self.conV2 ) )。 ) x=self.bn3(x ) x=x.view (-1,64 * 10 * 10 ) x=f.relu ) self.fc1 ) x=self.bn_f1(x ) x=sell

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。