详解LRN(local response normalization--局部响应标准化)缓解过拟合

article/2025/9/16 1:25:20

局部响应归一化层(Local Response Normalization)

LRN全称为Local Response Normalization,即局部响应归一化层,LRN函数类似Dropout和数据增强作为relu激活函数之后防止数据过拟合而提出的一种处理方法。这个函数很少使用,基本上被类似Dropout这样的方法取代.

为什么要引入LRN层?
首先要引入一个神经生物学的概念:侧抑制(lateral inhibitio),即指被激活的神经元抑制相邻的神经元。归一化(normaliazation)的目的就是“抑制”,LRN就是借鉴这种侧抑制来实现局部抑制,尤其是我们使用RELU的时候,这种“侧抑制”很有效 ,因而在alexnet里使用有较好的效果。

归一化有什么好处?
1.归一化有助于快速收敛;
2.对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。
补充:神经网络学习过程本质就是为了学习数据分布,一旦训练数据与测试数据的分布不同,那么网络的泛化能力也大大降低;另外一方面,一旦每批训练数据的分布各不相同(batch 梯度下降),那么网络就要在每次迭代都去学习适应不同的分布,这样将会大大降低网络的训练速度,这也正是为什么我们需要对数据都要做一个归一化预处理的原因。
LRN公式
在这里插入图片描述

code:
normal = tf.nn.lrn(input, depth_radius. bias, alpha, beta,name)

●i:代表下标,你要计算像素值的下标,从0计算起
●j:平方累加索引,代表从j~i的像素值平方求和
●x,y:像素的位置,公式中用不到
●a:代表feature map里面的 i 对应像素的具体值
●N:每个feature map里面最内层向量的列数
●k:超参数,由原型中的blas指定
●α:超参数,由原型中的alpha指定
●n/2:超参数,由原型中的deepth_radius指定
●β:超参数,由原型中的belta指定

Tensorflow示例

import tensorflow as tf  a = tf.constant([  [[1.0, 2.0, 3.0, 4.0],  [5.0, 6.0, 7.0, 8.0],  [8.0, 7.0, 6.0, 5.0],  [4.0, 3.0, 2.0, 1.0]],  [[4.0, 3.0, 2.0, 1.0],  [8.0, 7.0, 6.0, 5.0],  [1.0, 2.0, 3.0, 4.0],  [5.0, 6.0, 7.0, 8.0]]  
])  
#reshape 1批次  2x2x8的feature map  
a = tf.reshape(a, [1, 2, 2, 8])  normal_a=tf.nn.lrn(a,2,0,1,1)  
with tf.Session() as sess:  print("feature map:")  image = sess.run(a)  print (image)  print("normalized feature map:")  normal = sess.run(normal_a)  print (normal)

来看看是如何计算出来结果的:

normal = tf.nn.lrn(input, depth_radius. bias, alpha, beta,name)
normal=tf.nn.lrn(a,2,0,1,1)  
n/2:超参数,由原型中的deepth_radius指定
k:超参数,由原型中的blas指定
α:超参数,由原型中的alpha指定
β:超参数,由原型中的belta指定

由参数可以得出 n/2=2,k=0,α=1,β=1,N=8
(1)第一行的第一个数来说,此时i=0,
(a = 1,min(N-1, i+n/2) = min(7, 2)=2,j = max(0, i - k)=max(0, 0)=0),表示第一行下标从0~2的数平方求和, 也就是1,2,3这三个数的平方求和b=1/(12+22+32)=1/14 = 0.071428571
(2)第一行第四个数来说:此时i = 3
a = 4,min(N-1, i+n/2) = min(7, 5 )=5, j = max(0,1) = 1,这一行下标从1~5的数进行平方求和,b = 4/(22+32+32+42+52+62) = 4/90=0.044444444
以此类推可以计算出其他的数

输出结果:feature map:  [[[[ 1.  2.  3.  4.  5.  6.  7.  8.]  [ 8.  7.  6.  5.  4.  3.  2.  1.]]  [[ 4.  3.  2.  1.  8.  7.  6.  5.]  [ 1.  2.  3.  4.  5.  6.  7.  8.]]]]  normalized feature map:  [[[[ 0.07142857  0.06666667  0.05454545  0.04444445  0.03703704  0.03157895  0.04022989  0.05369128]  [ 0.05369128  0.04022989  0.03157895  0.03703704  0.04444445  0.05454545  0.06666667  0.07142857]]  [[ 0.13793103  0.10000001  0.0212766   0.00787402  0.05194805  0.04  0.03448276  0.04545454]  [ 0.07142857  0.06666667  0.05454545  0.04444445  0.03703704  0.03157895  0.04022989  0.05369128]]]] 

代码中的参数一般设置为k=2,n=5,alpha=1Xe-4,beta=0.75。


http://chatgpt.dhexx.cn/article/aflJfR32.shtml

相关文章

局部响应归一化LRN (Local Response Normalization)

一、LRN技术介绍: LRN(Local Response Normalization) 是一种提高深度学习准确度的技术方法。 LRN 一般是在激活、 池化函数后的一种方法。在 ALexNet 中, 提出了 LRN 层, 对局部神经元的活动创建竞争机制&#xff0c…

深度学习饱受争议的局部响应归一化(LRN)详解

前言:Local Response Normalization(LRN)技术主要是深度学习训练时的一种提高准确度的技术方法。其中caffe、tensorflow等里面是很常见的方法,其跟激活函数是有区别的,LRN一般是在激活、池化后进行的一种处理方法。LRN归一化技术首次在AlexNe…

压缩算法之算术编码浅析与实现

压缩算法之算术编码浅析与实现 简介实现思路实现代码参考资料 简介 算术编码,属于熵编码的范畴,常用于各种信息压缩场合,如图像、视频、音频压缩领域。 基本原理: 核心原则:出现频率高的信息,分配少的比特…

算术编码(1)

序列a2a1的区间为(0.2,0.22) 算术解码步骤:

用分组编码解决算术编码的精度要求问题

这篇博客要介绍的是算术编码、译码。主要用分组编码的思路解决了当消息比较长时,小数位数太多,计算工具精度达不到的问题。 文末给出了matlab代码。题目的要求是:已知26个英文字母和空格的统计概率,对文本文档中的消息&#xff08…

算术编码 matlab程序,算术编码算法的matlab实现

算术编码算法的matlab实现 实验 1 算术编码算法的 Matlab 实现实验学时:2实验类型:(演示、验证、综合、√设计、研究)实验要求:(√必修、选修)一、实验目的掌握算数编码原理。二、实验内容利用 Matlab 编写程序实现算数编码,包括…

十六、算术编码_2、算术编码举例实现

基本原理 在一次算术编码的执行前,为简便起见,首先假设输入的信源为0/1的二进制信源,0和1的概率比为7:3。即二者的概率为: p(0) = 0.7; p(1) = 0.3;假设输入的待编码信息为[0, 0, 1],在编码每一个符号时,都需要对概率区间进行分割,并通过与编码区间进行比较,判断是否…

信息论基础:算术编码

1 引言 霍夫曼码是一种无损编码,而且是最优的符号码。但是,它有两个缺点:(1)每个符号至少需要一个比特;(2)当符号的概率分布变化时,使用不方便。 用一个例子来看看霍夫…

多媒体数据处理实验1:算术编码

1. 算法描述 功能: 给定概率字典以及待编码字符串,求出该字符串算术编码的结果(最短二进制串),并能根据算数编码结果进行解码,得到原字符串。 2.算法流程: 算术编码流程: (1) 首先…

数字图像算术编码python_算术编码简介

上一篇讲了LZW编码,本篇讨论另一种不同的编码算法,算数编码。和哈夫曼编码一样,算数编码是熵编码的一种,是基于数据中字符出现的概率,给不同字符以不同的编码。本文也会对这两种编码方式的相似和不同点进行比较。 编码…

算术编码

文章首发于我的个人博客 前言 这篇博客主要总结大二下课程《信息论》实验的内容。主要包含固定模式的算数编码以及自适应模式的算术编码。我将首先介绍这两种算术编码的基本思想和实现思路,然后给出具体的python代码并对代码中的一些关键点进行解释说明。 固定模…

算术编码原理及其python实现

目录 1. 原理部分:2. 香农界理论分析:3. 代码实现:4.实验结果 1. 原理部分: 原理部分参考什么是算术编码 一个从信源序列到不可压缩二元序列的一个可逆映射,假设序列 { X 1 … X n } \{X_{1} \ldots X_{n}\} {X1​…X…

基本算术编码

1.基本思想 算术编码,就是用一个数编码一串字符串。它的思想是这样的:对一个需要编码的字符串,给出一个初始区间[0, 1),这个区间被分成n份,n是这串字符串中不同字符的个数,每一份占区间长度的比例与相应字符出现次数占整个字符串…

算术编码的基本概念

二、算术编码的基本概念 算术编码属于熵编码的一种重要的类型,其作用同变长编码等熵编码方法类似,用于压缩输入数据中的统计冗余,并且使用算术编码的压缩同样是无损压缩。 在本系列第1篇中讨论了典型的变长编码方法——哈夫曼编码。包括哈夫…

Otsu大津算法公式推导及python实现

目录 前言 一、类间平方差是什么? 二、公式推导及实现 1.求类间平方差 2.opencv-python编程实现 2.1 引入图像并灰度化 2.2 查看灰度值的分布情况 2.3 求全局平均阈值 2.4 求最大类间方差 3.算法的验证 总结 前言 OTSU(大津算法)是…

OTSU算法原理

OTSU算法原理及实现: 最大类间方差是由日本学者大津(Nobuyuki Otsu)于1979年提出,是一种自适应的阈值确定方法。算法假设图像像素能够根据阈值,被分成背景[background]和目标[objects]两部分。然后,计算该最佳阈值来区分这两类像素…

大津阈值分割算法(OTSU处理图像)

1.算法原理简述 对于图像I(x,y),前景(即目标)和背景的分割阈值记作T,属于前景的像素点数占整幅图像的比例记为ω0,其平均灰度μ0;背景像素点数占整幅图像的比例为ω1,其平均灰度为μ1。图像的总平均灰度记为μ&#xf…

[图像处理]14.分割算法比较 OTSU算法+自适应阈值算法+分水岭

参考文献: OTSU阈值分割孔洞填充海陆分离_SwordKii的博客-CSDN博客 drawContours函数_普通网友的博客-CSDN博客_drawcontours R329-opencv阈值分割算法——自适应阈值_Third Impact的博客-CSDN博客_opencv自适应阈值分割 分水岭算法的python实现及解析_进不去的…

OTSU算法 (大津算法)理解代码

OTSU算法:对图像进行二值化的算法 介绍 OTSU算法是一种自适应的阈值确定的方法,又称大津阈值分割法,是最小二乘法意义下的最优分割。 它是按图像的灰度特性,将图像分成背景和前景两部分。因方差是灰度分布均匀性的一种度量,背景…

Pr-快速上手-基本操作-教程

视频链接: Pr教程 视频设计到的知识点: 视频的剪辑bgm的管理添加字幕及弹幕的添加鬼畜视频的制作发布教程