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

局部响应归一化层(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(
### Caffenet架构详解 Caffenet是基于AlexNet改进而来的一个经典卷积神经网络模型,被广泛用于图像识别领域。此网络继承了AlexNet的核心设计理念并进行了优化调整以适应不同的硬件环境和计算资源需求。 #### 架构组成 1. **输入层** 输入图片大小通常设定为227×227像素的RGB三通道彩色图像[^2]。 2. **卷积层 (Conv Layers)** 卷积操作通过一系列可学习参数——即滤波器或内核来提取特征。Caffenet共有五层卷积层,每层负责捕捉不同层次的空间模式。前两层采用了较大尺度的感受野(kernel size=11x11, stride=4),以便快速覆盖较大的空间范围;随后几层则逐渐减小感受野尺寸至更精细级别(kernel size=3x3)。这种设计有助于捕获从低级边缘到高级语义信息的各种视觉特性。 3. **池化层 (Pooling Layer)** 在某些特定位置之后加入最大池化(Max Pooling),用来减少数据维度的同时保留最重要部分的信息。具体来说,在第1、2、5个卷积层后面设置了相应的池化层,它们均采用非重叠窗口形式的最大值采样策略(kernel size=3x3, stride=2)。 4. **归一化处理(Local Response Normalization, LRN)** 对局部区域内的响应进行标准化可以提高泛化能力。在第一个和第二个卷积层后分别实施LRN操作,增强了模型对于光照变化等因素鲁棒性。 5. **全连接层(Fully Connected Layers)** 经过上述多轮变换后的高维向量最终会被展平送入三个连续排列的全连接层中继续加工。最后一层作为输出单元给出预测类别概率分布。值得注意的是,为了防止过拟合现象发生,在最后一个隐藏层之前加入了Dropout机制随机丢弃一部分节点参与训练过程。 6. **Softmax分类器** 利用softmax函数将各候选类别的得分转换成概率表示形式,从而完成最后一步决策任务。整个流程遵循监督式机器学习范式,依靠大量标注样本指导权重更新直至收敛最优解处。 ```python import caffe from caffe import layers as L, params as P def create_caffenet(train_lmdb, test_lmdb, batch_size): n = caffe.NetSpec() # 数据读取 n.data, n.label = L.Data(batch_size=batch_size, backend=P.Data.LMDB, source=train_lmdb if phase == 'train' else test_lmdb, transform_param=dict(crop_size=227), include=dict(phase=phase)) # 定义卷积层和其他必要组件... return str(n.to_proto()) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值