数据的批标准化

本篇主要讲述什么是标准化,为什么要标准化,以及如何进行标准化(添加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. java 注解开发

    目录 注解 JDK自带的注解三个 注解分类 按照运行机制 按照来源分类 自定义注解的语法要求 元注解 解析注解 获取注解的注解 Spring中的注解 组合注解 注解 JDK自带的注解三个 @Overr ...

  2. Spring JPA 定义查询方法

    Spring JPA 定义查询方法 翻译:Defining Query Methods ​ 存储库代理有两种方式基于方法名派生特定域的查询方式: 直接从方法名派生查询 自定义查询方式 ​ 可用选项基于 ...

  3. [BUUOJ记录] [CISCN 2019 初赛]Love Math & [NESTCTF 2019]Love Math 2

    主要考察利用已有函数构造危险函数绕过,实现RCE. 进入题目给出源码: <?php error_reporting(0); //听说你很喜欢数学,不知道你是否爱它胜过爱flag if(!isse ...

  4. 终于开始了,微软的野心将通过全场景开发平台dotnet 5体现得淋漓尽致!

      本文已经同步到微信公众号「极客起源」 . 现在都在谈论全场景开发,也就是用一套开发工具,可以开发包括但不限于桌面.移动.IOT.游戏.Web等平台的应用.这样对于开发人员是非常爽的.本文将介绍微软 ...

  5. 跟着尚硅谷系统学习Docker-【day05】

    day05-20200717   p21.docker容器数据卷容器   就是活动硬盘上面挂载硬盘进行数据的传递.     [docker run -it --name dc01 fyr/centos ...

  6. docker打包项目

    nginx镜像制作实战 docker容器的主业 docker理念里,容器启动时,应当为它指定主业是什么,如nginx容器主业就是nginx代理服务,tomcat容器就是web服务等等 1.容器创建时, ...

  7. Tomcat源码分析(从启动流程到请求处理)

    Tomcat 8.5下载地址 https://tomcat.apache.org/download-80.cgi Tomcat启动流程 Tomcat源码目录 catalina目录 catalina包含 ...

  8. Sympy解方程-求极限-微分-积分-矩阵运算

    简介 Sympy是一个Python的科学计算库,用一套强大的符号计算体系完成诸如多项式求值.求极限.解方程.求积分.微分方程.级数展开.矩阵运算等等计算问题.虽然Matlab的类似科学计算能力也很强大 ...

  9. java集合类源码学习二

    我们查看Collection接口的hierarchy时候,可以看到AbstractCollection<E>这样一个抽象类,它实现了Collection接口的部分方法,Collection ...

  10. Linux:nginx基础

    一..简单介绍 nginx时开源的www服务器,只能解析静态的网页(html,js,css等),具有静态小文件高并发特性. 可做web服务器.负载均衡.web cache(web缓存) 优点: 1.高 ...