Layer Normalization和Batch Normalization
Layer Normalization
总览
- 针对同一通道数的图片的H*W进行层正则化,后面的γ和β是可以学习的参数,其中这两个的维度和最后一个的维度相同
- 例如特征图矩阵维度为[3, 577, 768], 那么γ和β的维度均为Tensor(768,)
step1:代码示例1
import torch
import torch.nn as nn
input = torch.tensor(
[
[
[
[2., 2.],
[3., 3.]
],
[
[3., 3.],
[2., 2.]
]
],
[
[
[2., 2.],
[3., 3.]
],
[
[3., 3.],
[2., 2.]
]
]
]
)
print(input)
print(input.shape) # torch.Size([2, 2, 2, 2])
layer_norm = nn.LayerNorm([2, 2, 2, 2], elementwise_affine=True)
output = layer_norm(input)
print(output)
"""
tensor([[[[-1.0000, -1.0000],
[ 1.0000, 1.0000]],
[[ 1.0000, 1.0000],
[-1.0000, -1.0000]]],
[[[-1.0000, -1.0000],
[ 1.0000, 1.0000]],
[[ 1.0000, 1.0000],
[-1.0000, -1.0000]]]], grad_fn=<NativeLayerNormBackward>)
"""
# 总结
"""
根据公式
E(x) = ((2+2+3+3)*4)/16 = 2.5
Var(x) = {(2-2.5)**2 * 8 + (3-2.5)**2 * 8} / 16 = 0.5**2
带入公式可以得到:
y = (x - E(x)) / (var(x)**0.5)
可以得到output
"""
step2更改输入观察输出
import torch
import torch.nn as nn
input = torch.tensor(
[
[
[
[3., 2.], # 这里将2 变成 3进行观察输出
[3., 3.]
],
[
[3., 3.],
[2., 2.]
]
],
[
[
[2., 2.],
[3., 3.]
],
[
[3., 3.],
[2., 2.]
]
]
]
)
print(input)
print(input.shape) # torch.Size([2, 2, 2, 2])
layer_norm = nn.LayerNorm([2, 2, 2, 2], elementwise_affine=True)
output = layer_norm(input)
print(output)
"""
tensor([[[[ 0.8819, -1.1339],
[ 0.8819, 0.8819]],
[[ 0.8819, 0.8819],
[-1.1339, -1.1339]]],
[[[-1.1339, -1.1339],
[ 0.8819, 0.8819]],
[[ 0.8819, 0.8819],
[-1.1339, -1.1339]]]], grad_fn=<NativeLayerNormBackward>)
"""
# 总结
"""
由上述的公式可得,输入变化,整个输出都进行了改变
"""
Batch Normalization
- 计算公式同上, 这里他的可学习参数与in_channel同
step1:代码示例1:
import torch
import torch.nn as nn
# With Learnable Parameters
m = nn.BatchNorm2d(2)
input = torch.tensor(
[
[
[
[2., 2.],
[3., 3.]
],
[
[3., 3.],
[2., 2.]
]
],
[
[
[2., 2.],
[3., 3.]
],
[
[3., 3.],
[2., 2.]
]
]
]
)
print(input)
print(input.shape) # torch.Size([2, 2, 2, 2])
output = m(input)
print(output)
"""
tensor([[[[-1.0000, -1.0000],
[ 1.0000, 1.0000]],
[[ 1.0000, 1.0000],
[-1.0000, -1.0000]]],
[[[-1.0000, -1.0000],
[ 1.0000, 1.0000]],
[[ 1.0000, 1.0000],
[-1.0000, -1.0000]]]], grad_fn=<NativeBatchNormBackward>)
"""
# 总结:
"""
计算的是某个批次的正则
根据公式 以第一个批次为例:
E(x) = {2+2+3+3+2+2+3+3}/8 = 2.5
Var(x) = {(2-2.5)**2 * 4 + (3-2.5)**2 * 4}/8 = 0.5**2
带入公式可以得到:
y = (x - E(x)) / (var(x)**0.5)
可以得到output
"""
进行微小更改观察变化
import torch
import torch.nn as nn
# With Learnable Parameters
m = nn.BatchNorm2d(2)
input = torch.tensor(
[
[
[
[3., 2.], # 这里2变成3来观察变化
[3., 3.]
],
[
[3., 3.],
[2., 2.]
]
],
[
[
[2., 2.],
[3., 3.]
],
[
[3., 3.],
[2., 2.]
]
]
]
)
print(input)
print(input.shape) # torch.Size([2, 2, 2, 2])
output = m(input)
print(output)
"""
tensor([[[[ 0.7746, -1.2910],
[ 0.7746, 0.7746]],
[[ 1.0000, 1.0000],
[-1.0000, -1.0000]]],
[[[-1.2910, -1.2910],
[ 0.7746, 0.7746]],
[[ 1.0000, 1.0000],
[-1.0000, -1.0000]]]], grad_fn=<NativeBatchNormBackward>)
"""
# 总结:
"""
进行微小更改观察到,发生变化的是他同一批次里面的
"""
参考
Layer Normalization和Batch Normalization的更多相关文章
- 深度学习之Batch Normalization
在机器学习领域中,有一个重要的假设:独立同分布假设,也就是假设训练数据和测试数据是满足相同分布的,否则在训练集上学习到的模型在测试集上的表现会比较差.而在深层神经网络的训练中,当中间神经层的前一层参数 ...
- tensorflow中使用Batch Normalization
在深度学习中为了提高训练速度,经常会使用一些正正则化方法,如L2.dropout,后来Sergey Ioffe 等人提出Batch Normalization方法,可以防止数据分布的变化,影响神经网络 ...
- 深度学习基础系列(七)| Batch Normalization
Batch Normalization(批量标准化,简称BN)是近些年来深度学习优化中一个重要的手段.BN能带来如下优点: 加速训练过程: 可以使用较大的学习率: 允许在深层网络中使用sigmoid这 ...
- Deep Learning 27:Batch normalization理解——读论文“Batch normalization: Accelerating deep network training by reducing internal covariate shift ”——ICML 2015
这篇经典论文,甚至可以说是2015年最牛的一篇论文,早就有很多人解读,不需要自己着摸,但是看了论文原文Batch normalization: Accelerating deep network tr ...
- 解开Batch Normalization的神秘面纱
停更博客好长一段时间了,其实并不是没写了,而是转而做笔记了,但是发现做笔记其实印象无法更深刻,因此决定继续以写博客来记录或者复习巩固所学的知识,与此同时跟大家分享下自己对深度学习或者机器学习相关的知识 ...
- 激活函数,Batch Normalization和Dropout
神经网络中还有一些激活函数,池化函数,正则化和归一化函数等.需要详细看看,啃一啃吧.. 1. 激活函数 1.1 激活函数作用 在生物的神经传导中,神经元接受多个神经的输入电位,当电位超过一定值时,该神 ...
- Batch Normalization、Layer Normalization、Instance Normalization、Group Normalization、Switchable Normalization比较
深度神经网络难训练一个重要的原因就是深度神经网络涉及很多层的叠加,每一层的参数变化都会导致下一层输入数据分布的变化,随着层数的增加,高层输入数据分布变化会非常剧烈,这就使得高层需要不断适应低层的参数更 ...
- Batch Normalization和Layer Normalization
Batch Normalization:对一个mini batch的样本,经过一个nueron(或filter)后生成的feature map中的所有point进行归一化.(纵向归一化) Layer ...
- 从Bayesian角度浅析Batch Normalization
前置阅读:http://blog.csdn.net/happynear/article/details/44238541——Batch Norm阅读笔记与实现 前置阅读:http://www.zhih ...
随机推荐
- Spark周总结(一)
本周学习内容: 1.搭建虚拟机Spark环境 2.idea编写Scala脚本并在yarn上运行 总结: 这周是回家第一周,虽然没啥事,但是还是想放松放松,也是万事开头难,跟着教程做,但总有几步跟教程上 ...
- mysql在cmd中查询到的汉字乱码问题解决 方法一
只要执行如上两个 set character_set_connection = gbk; set character_set_results= gbk; 将编码格式转换成gbk即可
- break,return,continue的区别和作用
学习目标: 理解break.return.continue在循环中的区别和作用 学习内容: 1.break break表示结束当前所在的循环. 循环输出到3,当i等于4后,跳出当前循环,继续向下执行循 ...
- 使用babel编译器将es6代码转为es5的方法
1.首先需要安装工具 babel-cli ========= npm i babel-cli -g install 可以使用i 代替 2.安装插件 npm i --save-dev babe ...
- Oracle集群 & Grid(rac)配置,反推创建过程(重要)。
目前机器上,oracle都是安装好的,那么我们怎么知道,之前的安装过程大概是什么样子呢? 大致安装oracle集群的内容: 一.准备和配置: 1.网卡 2.ip资源 3.scanip 4.hosts ...
- 前台js发请求参数与后台接参数的问题
js函数中写参数,ajax中写参数,示例如下: function informationQuery(sign){//预警详情条件查询 $.get("/detail/informationQu ...
- 【jenkins】04.SSH认证方式拉取Git代码
首先需要会git ssh 我们一般用http的形式拉取代码. ssh的好处就是不用每次输入密码,而且貌似会快丢丢,不知道是不是错觉. 大概需要三个步骤: 一.本地生成密钥对: 二.设置github上的 ...
- asp.net core启动源码以及监听,到处理请求响应的过程
摘要 asp.net core发布至今已经将近6年了,很多人对于这一块还是有些陌生,或者说没接触过:接触过的,对于asp.net core整个启动过程,监听过程,以及请求过程,响应过程也是一知半解,可 ...
- 腾讯云服务器ssh登录老是自动断开链接的解决办法
vim /etc/ssh/sshd_config 找到下面两行 #ClientAliveInterval 0 #ClientAliveCountMax 3 去掉注释,改成 ClientAliveInt ...
- partTwo自动出题程序
需求介绍 一家软件公司程序员二柱的小孩上了小学二年级,老师让家长每天出30道四则运算题目给小学生做. 二柱立马就想到写一个小程序来做这件事. 这个事情可以用很多语言或者工具来实现: Excel, C/ ...