deep_learning_Function_bath_normalization()
关于归一化的讲解的博客——【深度学习】Batch Normalization(批归一化)
tensorflow实现代码在这个博客——【超分辨率】TensorFlow中批归一化的实现——tf.layers.batch_normalization()函数
tf.nn.batch_normalization()函数用于执行批归一化。
# 用于最中执行batch normalization的函数
tf.nn.batch_normalization(
x,
mean,
variance,
offset,
scale,
variance_epsilon,
name=None
)
1
2
3
4
5
6
7
8
9
10
参数:
x是input输入样本
mean是样本均值
variance是样本方差
offset是样本偏移(相加一个转化值)
scale是缩放(默认为1)
variance_epsilon是为了避免分母为0,添加的一个极小值
输出的计算公式为:
y=scale∗(x−mean)/var+offset y = scale * (x - mean) / var + offset
y=scale∗(x−mean)/var+offset
这里安利一个简单讲述batch normalization的文章,还有相应的代码,通俗易懂。
tensorflow-BatchNormalization(tf.nn.moments及tf.nn.batch_normalization)
————————————————
原文链接:https://blog.csdn.net/TeFuirnever/article/details/88911995
批标准化
批标准化(batch normalization,BN)一般用在激活函数之前,使结果x=Wx+bx=Wx+b 各个维度均值为0,方差为1。通过规范化让激活函数分布在线性区间,让每一层的输入有一个稳定的分布会有利于网络的训练。
优点:
加大探索步长,加快收敛速度。
更容易跳出局部极小。
破坏原来的数据分布,一定程度上防止过拟合。
解决收敛速度慢和梯度爆炸。
tensorflow相应API
mean, variance = tf.nn.moments(x, axes, name=None, keep_dims=False)
计算统计矩,mean 是一阶矩即均值,variance 则是二阶中心矩即方差,axes=[0]表示按列计算;
tf.nn.batch_normalization(x, mean, variance, offset, scale, variance_epsilon, name=None)
tf.nn.batch_norm_with_global_normalization(x, mean, variance, beta, gamma, variance_epsilon, scale_after_normalization, name=None);
tf.nn.moments 计算返回的 mean 和 variance 作为 tf.nn.batch_normalization 参数调用;
tensorflow及python实现
import tensorflow as tf
W = tf.constant([[-2.,12.,6.],[3.,2.,8.]], )
mean,var = tf.nn.moments(W, axes = [0])
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
resultMean = sess.run(mean)
print(resultMean)
resultVar = sess.run(var)
print(resultVar)
[ 0.5 7. 7. ]
[ 6.25 25. 1. ]
计算每个列的均值及方差。
size = 3
scale = tf.Variable(tf.ones([size]))
shift = tf.Variable(tf.zeros([size]))
epsilon = 0.001
W = tf.nn.batch_normalization(W, mean, var, shift, scale, epsilon)
#参考下图BN的公式,相当于进行如下计算
#W = (W - mean) / tf.sqrt(var + 0.001)
#W = W * scale + shift

with tf.Session() as sess:
#必须要加这句不然执行多次sess会报错
sess.run(tf.global_variables_initializer())
resultW = sess.run(W)
print(resultW)
#观察初始W第二列 12>2 返回BN的W值第二列第二行是负的,其余两列相反
[[-0.99992001 0.99997997 -0.99950027]
[ 0.99991995 -0.99997997 0.99950027]]
Bug
Attempting to use uninitialized value Variable_8:
#运行sess.run之前必须要加这句不然执行多次sess会报错
sess.run(tf.global_variables_initializer())
参考
深度学习Deep Learning(05):Batch Normalization(BN)批标准化
谈谈Tensorflow的Batch Normalization
tensorflow 的 Batch Normalization 实现(tf.nn.moments、tf.nn.batch_normalization)
————————————————
原文链接:https://blog.csdn.net/eclipsesy/article/details/77597965
tensorflow 在实现 Batch Normalization(各个网络层输出的归一化)时,主要用到以下两个 api:
tf.nn.moments(x, axes, name=None, keep_dims=False) ⇒ mean, variance:
统计矩,mean 是一阶矩,variance 则是二阶中心矩
tf.nn.batch_normalization(x, mean, variance, offset, scale, variance_epsilon, name=None)
https://www.tensorflow.org/api_docs/python/tf/nn/batch_normalization
γ⋅x−μσ+β \gamma\cdot\frac{x-\mu}{\sigma}+\beta
γ 表示 scale 缩放因子,β \betaβ 表示偏移量;
tf.nn.batch_norm_with_global_normalization(t, m, v, beta, gamma, variance_epsilon, scale_after_normalization, name=None)
由函数接口可知,tf.nn.moments 计算返回的 mean 和 variance 作为 tf.nn.batch_normalization 参数进一步调用;
1. tf.nn.moments,矩
tf.nn.moments 返回的 mean 表示一阶矩,variance 则是二阶中心矩;
如我们需计算的 tensor 的 shape 为一个四元组 [batch_size, height, width, kernels],一个示例程序如下:
import tensorflow as tf
shape = [128, 32, 32, 64]
a = tf.Variable(tf.random_normal(shape)) # a:activations
axis = list(range(len(shape)-1)) # len(x.get_shape())
a_mean, a_var = tf.nn.moments(a, axis)
这里我们仅给出 a_mean, a_var 的维度信息,
sess = tf.Session()
sess.run(tf.global_variables_initalizer()) sess.run(a_mean).shape # (64, )
sess.run(a_var).shape # (64, ) ⇒ 也即是以 kernels 为单位,batch 中的全部样本的均值与方差
2. demo
def batch_norm(x):
epsilon = 1e-3
batch_mean, batch_var = tf.nn.moments(x, [0])
return tf.nn.batch_normalization(x, batch_mean, batch_var,
offset=None, scale=None,
variance_epsilon=epsilon)
references
<a href=“http://www.jianshu.com/p/0312e04e4e83”, target="_blank">谈谈Tensorflow的Batch Normalization
————————————————
原文链接:https://blog.csdn.net/lanchunhui/article/details/70792458
deep_learning_Function_bath_normalization()的更多相关文章
随机推荐
- Extjs4 修改combox中store的数据
{ xtype: "combo", fieldLabel: '选择模板', name: "TemplateType", fieldName: "Tem ...
- LoadRunner 技巧之 思考时间设置
LoadRunner 技巧之 思考时间设置 用户访问某个网站或软件,一般不会不停地做个各种操作,例如一次查询,用户需要时间查看查询的结果是否是自己想要的.例如一次订单提交,用户需要时间核对自己填写的信 ...
- FAQ_2
FAQ-2 1.LoadRunner超时错误: 在录制Web服务器端,如果超过120秒服务器协议脚本回放时超时情况经常出现,产生错误的原因也有很多,解决的方法也不同. 错误现象1:Action.c(1 ...
- extentreports 测试报告引用extend.js/css失败
测试工程引用extentreports 生成的测试报告,因为报告中的js和css网络不通,所以页面乱码 解决思路: 下载需要的js.css放到测试工程的static目录下 下载extentreport ...
- java:面向对象(接口(续),Compareble重写,Comparator接口:比较器的重写,内部类,垃圾回收机制)
接口: *接口定义:使用interface关键字 * [修饰符] interface 接口名 [extends 父接口1,父接口2...]{ * //常量的声明 * //方法的声明 * } *接口成员 ...
- Beego框架的一条神秘日志引发的思考
公司目前的后台是用Beego框架搭的,并且为了服务的不中断升级,我们开启了Beego的Grace模块,用于热升级支持.一切都跑井然有序,直到有一天,领导甩出一些服务日志,告知程序一直报错: 2018/ ...
- Python爬虫学习==>第十一章:分析Ajax请求-抓取今日头条信息
学习目的: 解决AJAX请求的爬虫,网页解析库的学习,MongoDB的简单应用 正式步骤 Step1:流程分析 抓取单页内容:利用requests请求目标站点,得到单个页面的html代码,返回结果: ...
- 【UVA - 1644 / POJ - 3518】Prime Gap(水题)
Prime Gap 这里直接写中文了 Descriptions: 对于一个数n,若n为素数则输出0,否则找到距离n最小的两个素数,一个大于n,一个小于n,输出他们的差(正数) Input 多组输入 每 ...
- linux环境jdk+tomcat搭建
一.什么是Linux? 和Windows操作系统软件一样,Linux也是一个操作系统软件.但是和Windows不同的是,Linux是一套开放源代码程序的.并可以自由传播的类Unix操作系统软件(Uni ...
- 【Linux开发】linux设备驱动归纳总结(四):2.进程调度的相关概念
linux设备驱动归纳总结(四):2.进程调度的相关概念 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...