首页 > 编程知识 正文

代码生成器原理,batch

时间:2023-05-05 01:57:16 阅读:19632 作者:3312

Batchnorm的原理和代码BN层的优点BN层的背景意义BN层如何实现BN层的计算流程BN层CNN中的BN层的整体流程SSD中的BN层

论文名称: batch normalization : acceleratingdeepnetworktrainingbyreducinginternalcovariateshift

论文地址: https://arxiv.org/abs/1502.03167

参考了几个优秀同学的博客,结合固态硬盘进行了通俗易懂的总结。 嘻嘻

BN层的优点1 .通过提高训练速度,我们可以使用较大的学习率来训练网络。

2 .提高网络泛化能力。

3.BN层本质上是归一化网络层,可以代替局部响应归一化层(LRN层)。

4 .样本训练的顺序可以被打乱(这样,同一张照片不会被多次挑选用于训练),论文说可以提高1%的精度。

BN层背景意义神经网络学习过程的本质是为了学习数据分布,训练数据和测试数据的分布不同,网络泛化能力也会大大降低,而训练数据的分布逐批不同(batch梯度降低),网络泛化能力也会大大降低因此,需要对数据进行归一化的预处理。

在深度网络训练过程中,高层训练参数更新后,低层输入数据分布会发生变化并积累,数据分布持续变化会影响网络训练速度。 我们把网络中间层在训练中数据分布的变化称为“Internal Covariate Shift”。 BN算法是指解决训练中中间层数据分布发生变化的情况。

BN层是如何实现的

BN层的计算流程1 .计算样本均值。

2 .计算样本方差。

3 .样本数据标准化处理。 如果只执行步骤3,则只使用sigmoid激活函数的线性部分来降低图层的表现能力;在步骤4中提高层的非线性。

4 .进行平移和变焦处理。 引入了和两个参数。 训练和两个参数。 引入了该可学习重构参数、,使我们的网络能够学习恢复原网络应该学习的特征分布。

在CNN中使用BN层,假设一层卷积层具有6个特征图,每个特征图的大小为100100,则该层网络具有6100100个神经元,采用BN时为6100100个神经元这不是恐惧吗? 因此,卷积层中BN的使用实际上也是采用权重共享这样的策略,将整个特征图作为一个神经元来处理。

卷积神经网络经过卷积得到的是一系列特征图,假设最小batch sizes为k,则网络某一层的输入数据可以表示为四维矩阵[k、h、w、c],c是特征图由于cnn可以将每个特征图视为一个特征处理(一个神经元),因此在使用Batch Normalization的情况下,最小batch size的大小为) khw,对于每个特征图可以学习的参数是

说白了,网络训练中一直以batch-size为最小单位进行反复。 每次新的batch-size进入网络时都会产生新的和。 也就是说,在训练期间生成图像总量/batch-size组参数。

整个BN层的流动

输入:进入活动函数的变量

输出:

1 .此处的k在卷积网络中可以视为卷积核的个数,如果网络的第n层有64个卷积核,则需要计算64次。 请注意,对于正向传播,使用和使BN层的输出与输入相同。

2 .反向传播时用和求梯度,改变训练权重(变量)。

3 .通过持续反复直到训练结束,求出不同层的和。

4 .不断查询训练集中的图像,提取出各batch_size中的和,最后将各层BN的和各自之和除以图像数得到平均直线,相对而言,无偏估计值为各层E[x]和Var[x] 5 .在预测的正向传播的情况下,对测试数据确定和,并且使用该层中的E[x]和Var[x]根据图中由113,3360表示的表达式计算BN层输出。

SSD的BN层

nets/ssd_VGG_300.py用于基于vgg特征提取网络的SSD300模型的nets/ssd_VGG_300.py文件

只有第一个特征层block4用于BN :

ssd_net其中,ssd_net接口用于建立SSD网络。

可以看到,block6 block7采用了dropout,缺省参数为0.5,其馀层未使用。

(为什么这样做,是因为第一个特征图在上面,norm较大,所以需要引入l2_normalize来减少,而后面的特征层规范化后则无法学习数据的真实分布,所以为了防止offict,需要使用blle

下文描述在多尺度预测特征图中是否采用BN。

ssd_multibox_layer调用的ssd_multibox_layer接口用于多尺度预测loc_pred位置和cls_pred类别。

nets/custom_layers.py其中nets/custom_layers.py上的l2_normalization接口是否由规范化调用:

首先,按照输入数据(k、h、w、c )的特征量的维度进行正则化。 步骤为nn.l2_normalize,

然后,为每个特征图提取可学习的scale因子(gamma ),缩放并调整每个层,最后返回调整后的特征图。

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