zoukankan      html  css  js  c++  java
  • Batch Normalization(批标准化,BN)

    1.什么是标准化?

    标准化:使数据符合 0 均值,1 为标准差的分布。

    神经网络对0附近的数据更敏感,但是随着网络层数的增加,特征数据会出现偏离0均值的情况,标准化能够使数据符合0均值,1为标准差的分布,把偏移的特征数据重新拉回到0附近

    Batch Normalization(批标准化):对一小批数据在网络各层的输出做标准化处理,其具体实现方式如图 5-10 所示。
    Batch Normalization 将神经网络每层的输入都调整到均值为 0,方差为 1 的标准正态分布,其目的是解决神经网络中梯度消失的问题,如图 5-11 所示。

     

     BN操作使得原本偏移的特征数据,如5-11的第一个图,重新拉回到0均值,使进入激活函数的数据分布在激活函数线性区,使得输入数据的微小变化,更明显的体现到激活函数的输出,提升了激活函数对输入数据的区分力。

    但是,这种简单的特征数据标准化,使特征数据完全满足标准正态分布,图5-12黄色的线,集中在激活函数中心的线性区域,使激活函数丧失了非线性特性,因此在BN操作中为每个卷积核引入了两个可训练的参数,缩放因子γ和偏移因子β,会与其他待训练参数一同被训练化,使标准正态分布后的特征数据通过缩放因子和偏移因子,优化了特征数据分布的宽窄和偏移量。保证了网络的非线性表达力(如果不加入这两个参数,相当于这一层所学习的特征分布被搞坏了)

    BN 操作的另一个重要步骤是缩放和偏移,值得注意的是,缩放因子 γ 以及偏移因子 β都是可训练参数,其作用如图 5-12 所示。

     2.BN层的位置(也属于网络的一层,即相当于加了个预处理层)

    BN 操作通常位于卷积层之后,激活层之前,在 Tensorflow 框架中,通常使用 Keras 中的 tf.keras.layers.BatchNormalization 函数来构建 BN 层。在调用此函数时,需要注意的一个参数是 training,此参数只在调用时指定,在模型进行前向推理时产生作用,当 training = True 时, BN 操作采用当前 batch 的均值和标准差;当training = False 时, BN 操作采用滑动平均(running)的均值和标准差。
    在 Tensorflow 中,通常会指定 training = False,可以更好地反映模型在测试集上的真实效果。

    3.滑动平均

    滑动平均(running) 的解释:滑动平均,即通过一个个 batch 历史的叠加,最终趋向数据集整体分布的过程,在测试集上进行推理时,滑动平均的参数也就是最终保存的参数。
    此外, Tensorflow 中的 BN 函数其实还有很多参数,其中比较常用的是 momentum,即动量参数, 与 sgd 优化器中的动量参数含义类似但略有区别, 具体作用为滑动平均 running =momentum * running + (1 – momentum) * batch, 一般设置一个比较大的值, 在 Tensorflow 框架中默认为 0.99。

     

    4.tensorflow中BN的使用

     

    1.1 tf.nn.moments

     (1)计算2x3向量的mean和variance

     

     

    (2)计算卷积神经网络某层的mean和variance

    假定我们需要计算的数据形状是[batchsize, height, width, kernels]

    输出:

     

     

     (3)tf.nn.batch_normalizatin

     

     

     

     注意:

    tf.control_dependencies(control_inputs)

     

  • 相关阅读:
    根据文件名或文件扩展名获取文件的默认图标
    TreeView实现类似Outlook在收件箱后面显示新邮件数
    取每组数据的第一条记录的SQL语句
    Stream 和 byte[] 之间的转换
    使用HttpWebRequest提交ASP.NET表单并保持Session和Cookie
    C# 创建临时文件
    Tomcat 服务不能启动的问题
    VS2008 椭圆曲线签名(ECDSA)
    2007年12月23日在博客园的排名进入了前300名
    现代软件工程 作业 3 团队作业
  • 原文地址:https://www.cnblogs.com/GumpYan/p/13557687.html
Copyright © 2011-2022 走看看