好处:

1.归一化后有什么好处呢?原因在于神经网络学习过程本质就是为了学习数据分布,一旦训练数据与测试数据的分布不同,那么网络的泛化能力也大大降低;

2.另外一方面,一旦每批训练数据的分布各不相同(batch 梯度下降),那么网络就要在每次迭代都去学习适应不同的分布,这样将会大大降低网络的训练速度,这也正是为什么我们需要对数据都要做一个归一化预处理的原因。

原因:

我们把网络中间层在训练过程中,数据分布的改变称之为:“Internal  Covariate Shift”。Paper所提出的算法,就是要解决在训练过程中,中间层数据分布发生改变的情况,于是就有了Batch  Normalization,这个牛逼算法的诞生。

首先学习一下白化这个预处理方法:

举例来说,假设训练数据是图像,由于图像中相邻像素之间具有很强的相关性,所以用于训练时输入是冗余的。白化的目的就是降低输入的冗余性;更正式的说,我们希望通过白化过程使得学习算法的输入具有如下性质:(i)特征之间相关性较低;(ii)所有特征具有相同的方差。

1.首先复习pca的本质:

本质就是1.先算n个特征数据集的协方差矩阵.2.然后找协方差矩阵从大到小最大的k个方向,k<n.3.把数据在这k个分量上做投影,就得到了更小维度的数据,也尽量保持了数据.

其实这些方向也就是矩阵的奇异值对应的奇异向量.也就是主方向.

2.第一种白化pca白化:1.先做pca  2.把得到的数据再让各个主方向的方差都是1即可.

def zca_whitening(inputs):
sigma = np.dot(inputs, inputs.T)/inputs.shape[] #inputs是经过归一化处理的,所以这边就相当于计算协方差矩阵
U,S,V = np.linalg.svd(sigma) #奇异分解
epsilon = 0.1 #白化的时候,防止除数为0
ZCAMatrix = np.dot(np.dot(U, np.diag(1.0/np.sqrt(np.diag(S) + epsilon))), U.T) #计算zca白化矩阵
return np.dot(ZCAMatrix, inputs) #白化变换

别人的代码.我感觉这写的根本不对啊.我试了input是2*3的矩阵输出一个1*3的矩阵.这尼玛sample_size都给我变了.搞毛.我再查查.感觉第一步sigma就不用求.

inputs就是一个大矩阵.

比如我做的汽车问题inputs=2万*30         sample_size*feature_size,这上面代码不对,根本跑不了.我已经需改好,放到博客里面了.

下面跳过白化.继续讨论bn算法.

随机梯度下降就是用batch的bp算法.虽然看了很多次,也会很多次,但是老忘记这个名字对应的含义,总感觉这个名字起的操蛋.为什么不用小批量bp算法来起名字!

这就是bn算法的核心了,加入一个放射变换,用这变化来归一化这一层的数据.

思路也不难,1.这个bn层,先做归一化,然后你归一化之后会破坏这个数据的分布,导致学习效果很差.

2.做一个放射变换把归一化之后的东西再放射一下来恢复这个数据进入这个bn层的输入状态.这样通过归一化和放射变化就组合出了bn层.

import numpy as np
X=np.array([[1,2,3],[2,3,4]])
gamma=1
beta=0
epsilon=0.01
m = np.mean(X, axis=-1, keepdims=True)#计算均值
std = np.std(X, axis=-1, keepdims=True)#计算标准差
X_normed = (X - m) / (std + epsilon)#归一化
out = gamma * X_normed + beta#重构变换
print (out)
print (np.std(out))
print (np.mean(out))

效果还行.听说效果能提高10倍,

行了,去汽车里面试试去了

学习bn算法的更多相关文章

  1. 转——深度学习之BN算法(Batch Normailization)

    Batch Normalization 学习笔记 原文地址:http://blog.csdn.net/hjimce/article/details/50866313 作者:hjimce 一.背景意义 ...

  2. BN算法

    批量归一化(BN: Batch Normalization) 1 BN训练 1)随机梯度下降法(SGD)对于训练深度网络简单高效,但是它有个毛病,就是需要我们人为的去选择参数,比如学习率.参数初始化. ...

  3. [置顶] 小白学习KM算法详细总结--附上模板题hdu2255

    KM算法是基于匈牙利算法求最大或最小权值的完备匹配 关于KM不知道看了多久,每次都不能完全理解,今天花了很久的时间做个总结,归纳以及结合别人的总结给出自己的理解,希望自己以后来看能一目了然,也希望对刚 ...

  4. 学习cordic算法所得(流水线结构、Verilog标准)

    最近学习cordic算法,并利用FPGA实现,在整个学习过程中,对cordic算法原理.FPGA中流水线设计.Verilog标准有了更加深刻的理解. 首先,cordic算法的基本思想是通过一系列固定的 ...

  5. 学习排序算法(一):单文档方法 Pointwise

    学习排序算法(一):单文档方法 Pointwise 1. 基本思想 这样的方法主要是将搜索结果的文档变为特征向量,然后将排序问题转化成了机器学习中的常规的分类问题,并且是个多类分类问题. 2. 方法流 ...

  6. 从 SGD 到 Adam —— 深度学习优化算法概览(一) 重点

    https://zhuanlan.zhihu.com/p/32626442 骆梁宸 paper插画师:poster设计师:oral slides制作人 445 人赞同了该文章 楔子 前些日在写计算数学 ...

  7. 吴裕雄 python 机器学习——集成学习AdaBoost算法回归模型

    import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble from sklear ...

  8. 吴裕雄 python 机器学习——集成学习AdaBoost算法分类模型

    import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble from sklear ...

  9. TF之BN:BN算法对多层中的每层神经网络加快学习QuadraticFunction_InputData+Histogram+BN的Error_curve

    # 23 Batch Normalization import numpy as np import tensorflow as tf import matplotlib.pyplot as plt ...

随机推荐

  1. UVA-839-二叉树-一个有意思的题目

    题意: 一颗二叉树可以看成一个杠杆,左右俩边有重量,有到支点长度,判断整个树是否平衡(根据杠杆原理),如果当前结点有左孩子,那么当前左边的重量就是左孩子的总和,右边同理 递归,发现scanf和cin的 ...

  2. sqlserver查询---分配cpu等资源

    数据库资源按需分配 https://www.cnblogs.com/i6first/p/4138365.html https://blog.csdn.net/kk185800961/article/d ...

  3. maven 在pom.xml 中指定仓库位置

    ...... 在pom.xml 中添加 仓库位置(这样遇到私服没有的依赖,就会去这下载) </properties> <repositories><!-- 代码库 --& ...

  4. 【转】Ultra simple ISO-7816 Interface

    原文出自 http://hilbert-space.de/?p=135 While laying out a PCB for my SWP reader project I realized that ...

  5. 使用Ping来做等待的时间计算

    利用ping两次发送消息之间的间隔时间.ping在发送多个消息时,在得到上一次消息的回应后,它会再等待1秒的时间才发送下一次消息,而这个回应时间因机型.系统和网络配置而不同,其中IP地址尤其关键,只有 ...

  6. Utils使用

    获取两个时间之间的天数 var startDate = new Date(_startDate).getTime(); var endDate = new Date(_endDate).getTime ...

  7. DataTable转换成实体

    public static class DataTableToEntity { /// <summary> /// 将DataTable数据源转换成实体类 /// </summary ...

  8. Java 静态代理和动态代理例子

    代理Proxy: Proxy代理模式是一种结构型设计模式,主要解决的问题是:在直接访问对象时带来的问题 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问.代理类负责为委 ...

  9. CryptographyUtil盐加密

    import org.apache.shiro.crypto.hash.Md5Hash; /** * 加密工具 * @author Administrator * */ public class Cr ...

  10. Why ExerciseAlone May Not Be the Key to Weight Loss

    加强运动也许并不能减肥Why ExerciseAlone May Not Be the Key to Weight LossIf you give a mouse a running wheel, i ...