数据的批标准化

本篇主要讲述什么是标准化,为什么要标准化,以及如何进行标准化(添加BN层)。

1.什么是标准化

  传统机器学习中标准化也叫做归一化。

  一般是将数据映射到指定的范围,用于去除不同维度数据的量纲以及量纲单位(说白了就是让数据尽可能处于某个范围内)。

  数据标准化让机器学习模型看到的不同样本彼此之间更加相似,这有助于模型的学习与对新数据的泛化。

  常见的数据标准化形式:

     标准化:

    将数据减去其平均值使其中心值为0,然后将数据除以其标准差使其标准差为1。

    归一化:

    将数据减去最小值除以最大时,使取值范围压缩到0~1之间。

   批标准化:

  Batch Normalization(BN),批标准化

   和普通的数据标准化类似,是将分散的数据统一的一种做法,也是优化神经网络的一种方法。

   不仅在数据输入之前对数据做标准化,在网络模型的每一次变换之后都应该考虑数据的标准化。

   即使在训练过程中,均值和方差随着时间发生变化,它也可以适应性的将数据标准化。

2.为什么要做批标准化

   批标准化解决的问题是梯度消失梯度爆炸

   批标准化是一种训练优化方法

  梯度消失与梯度爆炸:

    对于激活函数,之前一直使用Sigmoid函数,其函数图像成一个S型,如下所示,它会使得输出在[0, 1]之间:

 
    如果我们输入的数据在0附近左右均匀分布,x的变化就会引起y的正常变化,就是一个正常的梯度变化。
   但是,当数据全部非常大,或者非常小的时候,x上的变化几乎不会引起y的变化,训练的速度就会非常缓慢,且效果差,这种情况就称为梯度消失。同理,在其他的激活函数中,也会出现数据范围导致的梯度异常激增,x上的微小变化就会导致y的剧烈变化,从而影响训练效果,这种情况称之为梯度爆炸。

  批标准化的好处:

  数据预处理可以加速收敛,同理,在神经网络中使用批标准化也可以加速收敛,而且还有更多的优点。

  1.具有正则化的效果(抑制过拟合)。

  2.提高模型泛化能力。

  3.允许更高的学习率从而加速收敛。

  4.批标准化有助于梯度的传播,因此能够使用更深的网络进行训练。对于特别深的神经网络,只有包含多个Batch Normalization(BN)层才能进行训练。

3.tensorflow实现批标准化

  Batch Normalization通常在卷积层或者全连接层之后使用(原始论文中一般是应用于卷积层或全连接层之后,在激活函数之前。但是,实际上放在激活函数之后效果可能更好)。

  使用tf.keras.layers.Batchnormalization()来实现。

  tf.keras.layers.Batchnormalization()不仅可以处理训练数据的均值和方差,也可以在预测时,根据训练数据均值和方差的期望值对测试数据进行处理。

  代码: 

1 model.add(tf.keras.layers.Conv2D(64, (3, 3)))
2 model.add(tf.keras.layers.BatchNormalization())
3 model.add(tf.keras.layers.Activation('relu'))
4 #两种BN层插入方式
5 model.add(tf.keras.layers.Conv2D(64, (3, 3), activation = 'relu'))
6 model.add(tf.keras.layers.BatchNormalization())

Tensorflow学习笔记No.6的更多相关文章

  1. Tensorflow学习笔记2:About Session, Graph, Operation and Tensor

    简介 上一篇笔记:Tensorflow学习笔记1:Get Started 我们谈到Tensorflow是基于图(Graph)的计算系统.而图的节点则是由操作(Operation)来构成的,而图的各个节 ...

  2. Tensorflow学习笔记2019.01.22

    tensorflow学习笔记2 edit by Strangewx 2019.01.04 4.1 机器学习基础 4.1.1 一般结构: 初始化模型参数:通常随机赋值,简单模型赋值0 训练数据:一般打乱 ...

  3. Tensorflow学习笔记2019.01.03

    tensorflow学习笔记: 3.2 Tensorflow中定义数据流图 张量知识矩阵的一个超集. 超集:如果一个集合S2中的每一个元素都在集合S1中,且集合S1中可能包含S2中没有的元素,则集合S ...

  4. TensorFlow学习笔记之--[compute_gradients和apply_gradients原理浅析]

    I optimizer.minimize(loss, var_list) 我们都知道,TensorFlow为我们提供了丰富的优化函数,例如GradientDescentOptimizer.这个方法会自 ...

  5. 深度学习-tensorflow学习笔记(1)-MNIST手写字体识别预备知识

    深度学习-tensorflow学习笔记(1)-MNIST手写字体识别预备知识 在tf第一个例子的时候需要很多预备知识. tf基本知识 香农熵 交叉熵代价函数cross-entropy 卷积神经网络 s ...

  6. 深度学习-tensorflow学习笔记(2)-MNIST手写字体识别

    深度学习-tensorflow学习笔记(2)-MNIST手写字体识别超级详细版 这是tf入门的第一个例子.minst应该是内置的数据集. 前置知识在学习笔记(1)里面讲过了 这里直接上代码 # -*- ...

  7. tensorflow学习笔记(4)-学习率

    tensorflow学习笔记(4)-学习率 首先学习率如下图 所以在实际运用中我们会使用指数衰减的学习率 在tf中有这样一个函数 tf.train.exponential_decay(learning ...

  8. tensorflow学习笔记(3)前置数学知识

    tensorflow学习笔记(3)前置数学知识 首先是神经元的模型 接下来是激励函数 神经网络的复杂度计算 层数:隐藏层+输出层 总参数=总的w+b 下图为2层 如下图 w为3*4+4个   b为4* ...

  9. tensorflow学习笔记(2)-反向传播

    tensorflow学习笔记(2)-反向传播 反向传播是为了训练模型参数,在所有参数上使用梯度下降,让NN模型在的损失函数最小 损失函数:学过机器学习logistic回归都知道损失函数-就是预测值和真 ...

  10. tensorflow学习笔记(1)-基本语法和前向传播

    tensorflow学习笔记(1) (1)tf中的图 图中就是一个计算图,一个计算过程.                                       图中的constant是个常量 计 ...

随机推荐

  1. Micro-CMS v1 (Hacker101 CTF)

    这道题一共有四个flag,初步观察可以创建或者修改发布的内容. Flag1: 首先随便创建了一个页面,创建完成后页面会直接跳转到我们所创建的页面. 初步判断网页应该是根据地址栏后的数字来查询并且显示页 ...

  2. Application.LoadLevel

    Unity在场景切换之间清理下内存 http://www.cnblogs.com/dongz888/p/4920714.html

  3. nginx的gzip压缩

    随着nginx的发展,越来越多的网站使用nginx,因此nginx的优化变得越来越重要,今天我们来看看nginx的gzip压缩到底是怎么压缩的呢? gzip(GNU-ZIP)是一种压缩技术.经过gzi ...

  4. 用Nginx将web请求引导到本机两个tomcat

    如何在本机启动两个tomcat请参考:https://www.cnblogs.com/xiandedanteng/p/12100461.html 而Nginx这边,将\conf\nginx.conf ...

  5. 7.SwrContext音频重采样使用

    头文件位于#include <libswresample/swresample.h>   SwrContext常用函数如下所示 SwrContext *swr_alloc(void); / ...

  6. get、post请求方式区别

    1.get请求只有请求头,没有请求体,它的参数只能写在url里面,post请求数据放在请求体里面 (HTTP协议:两台电脑交互url请求头Request Headers:一些额外的信息,比如用的什么浏 ...

  7. oracle之二控制文件

    控制文件 3.1 控制文件的功能和特点:       1)定义数据库当前物理状态,不断在往controlfile写入[SCN等]       2)维护数据的一致性       3)是一个二进制文件   ...

  8. PHP程序十点未来的建议

    1. Composer 第一点就要提 Composer ,自从 Composer 出现后,PHP 的依赖管理可以变得非常简单.程序内依赖一些类库和框架,直接使用 Composer 引入即可,通过使用 ...

  9. Angular用户输入

    用户输入 事件绑定 使用 (event) on-event 概念 ​ 用户操作 -> DOM事件 用户操作 点击链接 按下按钮 输入文字 DOM事件 $event 类型 any 不能推测属性 可 ...

  10. Linux磁盘管理及LVM讲解(1)

    硬盘接口 从整体的角度上,硬盘接口分为IDE.SATA.SCSI和SAS四种,IDE接口硬盘多用于家用产品中,也部分应用于服务器,SCSI接口的硬盘则主要应用于服务器市场,而SAS只在高端服务器上,价 ...