Tensorflow学习笔记No.6
数据的批标准化
本篇主要讲述什么是标准化,为什么要标准化,以及如何进行标准化(添加BN层)。
1.什么是标准化
传统机器学习中标准化也叫做归一化。
一般是将数据映射到指定的范围,用于去除不同维度数据的量纲以及量纲单位(说白了就是让数据尽可能处于某个范围内)。
数据标准化让机器学习模型看到的不同样本彼此之间更加相似,这有助于模型的学习与对新数据的泛化。
常见的数据标准化形式:
标准化:
将数据减去其平均值使其中心值为0,然后将数据除以其标准差使其标准差为1。
归一化:
将数据减去最小值除以最大时,使取值范围压缩到0~1之间。
批标准化:
Batch Normalization(BN),批标准化
和普通的数据标准化类似,是将分散的数据统一的一种做法,也是优化神经网络的一种方法。
不仅在数据输入之前对数据做标准化,在网络模型的每一次变换之后都应该考虑数据的标准化。
即使在训练过程中,均值和方差随着时间发生变化,它也可以适应性的将数据标准化。
2.为什么要做批标准化
批标准化解决的问题是梯度消失与梯度爆炸。
批标准化是一种训练优化方法。
梯度消失与梯度爆炸:
对于激活函数,之前一直使用Sigmoid函数,其函数图像成一个S型,如下所示,它会使得输出在[0, 1]之间:
批标准化的好处:
数据预处理可以加速收敛,同理,在神经网络中使用批标准化也可以加速收敛,而且还有更多的优点。
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的更多相关文章
- Tensorflow学习笔记2:About Session, Graph, Operation and Tensor
简介 上一篇笔记:Tensorflow学习笔记1:Get Started 我们谈到Tensorflow是基于图(Graph)的计算系统.而图的节点则是由操作(Operation)来构成的,而图的各个节 ...
- Tensorflow学习笔记2019.01.22
tensorflow学习笔记2 edit by Strangewx 2019.01.04 4.1 机器学习基础 4.1.1 一般结构: 初始化模型参数:通常随机赋值,简单模型赋值0 训练数据:一般打乱 ...
- Tensorflow学习笔记2019.01.03
tensorflow学习笔记: 3.2 Tensorflow中定义数据流图 张量知识矩阵的一个超集. 超集:如果一个集合S2中的每一个元素都在集合S1中,且集合S1中可能包含S2中没有的元素,则集合S ...
- TensorFlow学习笔记之--[compute_gradients和apply_gradients原理浅析]
I optimizer.minimize(loss, var_list) 我们都知道,TensorFlow为我们提供了丰富的优化函数,例如GradientDescentOptimizer.这个方法会自 ...
- 深度学习-tensorflow学习笔记(1)-MNIST手写字体识别预备知识
深度学习-tensorflow学习笔记(1)-MNIST手写字体识别预备知识 在tf第一个例子的时候需要很多预备知识. tf基本知识 香农熵 交叉熵代价函数cross-entropy 卷积神经网络 s ...
- 深度学习-tensorflow学习笔记(2)-MNIST手写字体识别
深度学习-tensorflow学习笔记(2)-MNIST手写字体识别超级详细版 这是tf入门的第一个例子.minst应该是内置的数据集. 前置知识在学习笔记(1)里面讲过了 这里直接上代码 # -*- ...
- tensorflow学习笔记(4)-学习率
tensorflow学习笔记(4)-学习率 首先学习率如下图 所以在实际运用中我们会使用指数衰减的学习率 在tf中有这样一个函数 tf.train.exponential_decay(learning ...
- tensorflow学习笔记(3)前置数学知识
tensorflow学习笔记(3)前置数学知识 首先是神经元的模型 接下来是激励函数 神经网络的复杂度计算 层数:隐藏层+输出层 总参数=总的w+b 下图为2层 如下图 w为3*4+4个 b为4* ...
- tensorflow学习笔记(2)-反向传播
tensorflow学习笔记(2)-反向传播 反向传播是为了训练模型参数,在所有参数上使用梯度下降,让NN模型在的损失函数最小 损失函数:学过机器学习logistic回归都知道损失函数-就是预测值和真 ...
- tensorflow学习笔记(1)-基本语法和前向传播
tensorflow学习笔记(1) (1)tf中的图 图中就是一个计算图,一个计算过程. 图中的constant是个常量 计 ...
随机推荐
- webdriver入门之环境准备
1.安装ruby 下载ruby的安装包,很简单,不解释.装好之后打开cmd输入以下命令验证是否安装成功 ruby -v 2.安装webdriver 确保机器联网,用gem命令安装是在有网络的情况下进行 ...
- 【jmespath】—1. 基础用法
一.jsonpath 之前我写接口自动化测试时候,对于复杂的json返回,会使用jsonpath这个第三方库,就像写xpath一样,方便的查询json元素. 因为之前写WEB自动化时候,总用xpath ...
- CC2530的ADC采集外部电压
初窥ZIGBEE 要在zigbee的组网中加入烟雾传感器的模块,所以需要用到cc2530的ADC对传感器输出的模拟信号进行采样.下面是自己对实现用CC2530的ADC采集外部电压的程序过程. 以下是A ...
- Oracle 回滚段undo
Undo的作用 数据的回滚 一致性读 表的闪回(事务,查询的闪回..) 失败会话的恢复 回滚rollback操作 SQL> archive log list; ORA-01031: 权限不足 S ...
- ElasticsSearch初装 环境Win10
步骤: 1.从 http://how2j.cn/frontdownload?bean.id=1694 下载6.22 版本 2.双击elasticsearch.bat启动ElasticsSearch [ ...
- PHP 安装 扩展时 抛出 /usr/local/Cellar/php@7.1/7.1.25/pecl 异常解决
liugx@MacBook-Pro ~/work/php/ext_source/php-xhprof-extension master make installmkdir: /usr/ ...
- get、post请求方式在postman中使用步骤
1.get请求方式:不需要借助任何工具,在浏览器里面就可以发送请求,直接在浏览器里面输入访问 url?参数名=参数值 url?parma=abc&name=abcd 2.post请 ...
- Win10安装Tensorflow-gpu遇到Could not install packages due to an EnvironmentError: [WinError 5] 拒绝访问
最近因为上课需要安装Anaconda和Tensorflow,安装Anaconda后再使用 Tensorflow官网提供的pip安装Tensorflow-GPU方法会出现如下错误: 解决方法:在安装命令 ...
- SSM获取SqlSessionFactory
1.实现类获取session //根据id 修改阈值 public int altThers(threshold threshold) { SqlSessionFactoryBuilder build ...
- session、闪现、请求扩展
session 除请求对象之外,还有一个session对象.它允许你在不同请求储存特定用户的信息.它是在Cookies的基础上实现的,并且对,Cookies进行密钥签名要使用会话,你需要设置一个密钥. ...