浅谈Python几种常见的归一化方法
作者:不想敲代码的小杨 发布时间:2021-01-22 16:36:45
数据归一化是深度学习数据预处理中非常关键的步骤,可以起到统一量纲,防止小数据被吞噬的作用。
一:归一化的概念
归一化就是把所有数据都转化成[0,1]或者[-1,1]之间的数,其目的是为了取消各维数据之间的数量级差别,避免因为输入输出数据数量级差别大而造成网络预测误差过大。
二:归一化的作用
为了后面数据处理的方便,归一化可以避免一些不必要的数值问题。
为了程序运行时收敛速度更快
统一量纲。样本数据的评价标准不一样,需要对其量纲化,统一评价标准,这算是应用层面的需求。
避免神经元饱和。就是说当神经元的激活在接近0或者1时,在这些区域,梯度几乎为0,这样在反向传播过程中,局部梯度就会接近于0,这样非常不利于网络的训练。
保证输出数据中数值小的不被吞食。
三:归一化的类型
1:线性归一化
线性归一化也被称为最小-最大规范化;离散标准化,是对原始数据的线性变换,将数据值映射到[0,1]之间。用公式表示为:
差标准化保留了原来数据中存在的关系,是消除量纲和数据取值范围影响的最简单的方法。代码实现如下:
def MaxMinNormalization(x,Max,Min):
x = (x - Min) / (Max - Min);
return x
适用范围:比较适用在数值比较集中的情况
缺点:
如果max和min不稳定,很容易使得归一化的结果不稳定,使得后续使用效果也不稳定。如果遇到超过目前属性[min,max]取值范围的时候,会引起系统报错。需要重新确定min和max。
如果数值集中的某个数值很大,则规范化后各值接近于0,并且将会相差不大。(如 1,1.2,1.3,1.4,1.5,1.6,10)这组数据。
2:零-均值归一化(Z-score标准化)
Z-score标准化也被称为标准差标准化,经过处理的数据的均值为0,标准差为1。其转化公式为:
其中为原始数据的均值,
为原始数据的标准差,是当前用的最多的标准化公式
这种方法给予原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。经过处理的数据符合标准正态分布,即均值为0,标准差为1,这里的关键在于复合标准正态分布
代码实现如下:
def Z_ScoreNormalization(x,mu,sigma):
x = (x - mu) / sigma;
return x
3:小数定标规范化
这种方法通过移动属性值的小数数位,将属性值映射到[-1,1]之间,移动的小数位数取决于属性值绝对值的最大值。转换公式为:
4:非线性归一化
这个方法包括log,指数,正切
适用范围:经常用在数据分析比较大的场景,有些数值很大,有些很小,将原始值进行映射。
四:批归一化(BatchNormalization)
1:引入
在以往的神经网络训练时,仅仅只对输入层数据进行归一化处理,却没有在中间层进行归一化处理。虽然我们对输入数据进行了归一化处理,但是输入数据经过了这样的矩阵乘法之后,其数据分布很可能发生很大改变,并且随着网络的层数不断加深。数据分布的变化将越来越大。因此这种在神经网络中间层进行的归一化处理,使得训练效果更好的方法就被称为批归一化(BN)
2:BN算法的优点
减少了人为选择参数
减少了对学习率的要求,我们可以使用初始状态下很大的学习率或者当使用较小的学习率时,算法也能够快速训练收敛。
破换了原来的数据分布,一定程度上缓解了过拟合(防止每批训练中某一个样本经常被挑选到)
减少梯度消失,加快收敛速度,提高训练精度。
3:批归一化(BN)算法流程
输入:上一层输出结果X={x1,x2,.....xm},学习参数,
算法流程:
1)计算上一层输出数据的均值:
其中,m是此次训练样本batch的大小。
2)计算上一层输出数据的标准差:
3)归一化处理得到
公式中的是为了避免分母为0而加进去接近于0的很小的值。
4)重构,对经过上面归一化处理得到的数据进行重构,得到:
其中,
为可学习的参数。
来源:https://blog.csdn.net/weixin_43921949/article/details/126822034


猜你喜欢
- 写在之前围绕类的话题,说是说不完的,仅在特殊方法,除了我们在前面遇到过的 __init__(),__new__(),__str__() 等之
- 1 关于 Matplotlib 模块Matplotlib 是一个由 John Hunter 等开发的,用以绘制二维图形的 Python 模块
- CREATE TABLE A LIKE B此种方式在将表B复制到A时候会将表B完整的字段结构和索引复制到表A中来。CREATE TABLE
- 官方给出Vue.filters(id , [definition])//id {string}//definition {function}
- 通常情况下上传图片是要通过提交form表单来实现的,但是这又不可避免的产生了网页转。利用ajax技术和FormData()对象可以有效的解决
- Python保存网页图片这个是个比较简单的例子,网页中的图片地址都是使用'http://。。。。.jpg'这种方式直接定义的
- 由于js的代码逻辑越来越重,一个js文件可能会有上千行,十分不利于开发与维护。最近正在把逻辑很重的js拆分成模块,在一顿纠结是使用requi
- Django框架中的URL分发采用正则表达式匹配来进行,以下是正则表达式的基本规则:官方演示代码:from django.conf.urls
- 这篇文章主要介绍了Python中join()函数多种操作代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- python logging模块主要是python提供的通用日志系统,使用的方法其实挺简单的,这块就不多介绍。下面主要会讲到在使用pytho
- 前段时间我们部门的粉丝和布林同学都写过关于这个问题的文章。刚好阅读了关于这个问题的其他争论文章。所以顺便在这补充几点。首先说明这里讨论的是在
- 一、 图片转视频任务需求背景在标注数据的过程中,需要【反复】浏览大量图片(万张以上的数量级),确认图片中的目标类别以及室内户型布局。但是,在
- 作用collate_fn:即用于collate的function,用于整理数据的函数。说到整理数据,你当然要会用数据,即会用数据制作工具to
- 为了保障数据的安全,需要定期对数据进行备份。备份的方式有很多种,效果也不一样。一旦数据库中的数据出现了错误,就需要使用备份好的数据进行还原恢
- 通常情况下:from threading import Threadglobal_num = 0def func1(): global gl
- 如果想要在有序数据中进行查找想要的数据,二分查找法就个好方法,它可以大大缩短了搜索时间,是一种常见的查找方法。二分查找很好写,却很难写对,下
- 1、目前来看,百付宝仅仅只是C2C的一个支付后台。他的内容只集中于“钱和订单”两个环节,没有其他干扰信息。2、百付宝的界面表现很简单。因为简
- 下面是用Python实现Floyd算法的代码,供大家参考,具体内容如下# -*- coding: utf-8 -*- ""
- 现在只有山东、北京、上海等发达地区有考Python的这个举动,其他地区暂时还没有。首先,Python类似于c++,Python是一种面向对象
- 实验环境:windows 7,anaconda 3(Python 3.5),tensorflow(gpu/cpu)函数介绍:标准化处理可以使