LRN层的作用
局部归一化:被激活的神经元抑制相邻神经元,使用LRN增加了泛化能力(使输出中响应比较大的值变得相对更大,并抑制其他响应较小的神经元)。
tensorflow中的lrn函数
函数原型如下:
def lrn(input, depth_radius=None, bias=None, alpha=None, beta=None,
name=None):
计算公式如下:
i:代表通道,你要计算像素值所在的通道,从0到N-1
j:平方累加索引,代表从j~i的像素值平方求和
x,y:像素的位置,就是像素所在通道的高和宽
a:代表feature map里面的对应像素的具体值
N:通道的个数,也就是本层feature map的个数
k:超参数,由原型中的bias指定
α:超参数,由原型中的alpha指定
n/2:超参数,由原型中的deepth_radius指定,表示分母的计算范围
β:超参数,由原型中的belta指定
公式详解:
这个公式中的a表示卷积层(包括卷积操作和池化操作)后的输出结果,这个输出结果的结构是一个四维数组[batch,height,width,channel],这里可以简单解释一下,batch就是批次数(每一批为一张图片),height就是图片高度,width就是图片宽度,channel就是通道数可以理解成一批图片中的某一个图片经过卷积操作后输出的神经元个数(或是理解成处理后的图片深度)。ai(x,y)表示在这个输出结构中的一个位置[a,b,c,d],可以理解成在某一张图中的某一个通道下的某个高度和某个宽度位置的点,即第a张图的第d个通道下的高度为b宽度为c的点。论文公式中的N表示通道数(channel)。a,n/2,k,α,β分别表示函数中的input,depth_radius,bias,alpha,beta,其中n/2,k,α,β都是自定义的,**特别注意一下∑叠加的方向是沿着通道方向的,即每个点值的平方和是沿着a中的第3维channel方向的,也就是一个点同方向的前面n/2个通道(最小为第0个通道)和后n/2个通道(最大为第d-1个通道)的点的平方和(共n+1个点)。**而函数的英文注解中也说明了把input当成是d个3维的矩阵(计算每一个feature map时都要针对一个三维矩阵进行计算),说白了就是把input的通道数当作3维矩阵的个数,叠加的方向也是在通道方向。
结合下图进行理解:
理解feature map
1.理解feature map:
在cnn的每个卷积层,数据都是以三维形式存在的。你可以把它看成许多个二维图片叠在一起(像豆腐皮一样),其中每一个称为一个feature map。
2.feature map生成:
输入层:在输入层,如果是灰度图片,那就只有一个feature map;如果是彩色图片,一般就是3个feature map(红绿蓝)。
其它层:层与层之间会有若干个卷积核(kernel)(也称为过滤器),上一层每个feature map跟每个卷积核做卷积,都会产生下一层的一个feature
map,有N个卷积核,下层就会产生N个feather map。
3.多个feature的作用:
在卷积神经网络中,我们希望用一个网络模拟视觉通路的特性,分层的概念是自底向上构造简单到复杂的神经元。
我们希望构造一组基,这组基能够形成对于一个事物完备的描述,例如描述一个人时我们通过描述身高/体重/相貌等,在卷积网中也是如此。在同一层,我们希望得到对于一张图片多种角度的描述,具体来讲就是用多种不同的卷积核对图像进行卷,得到不同核(这里的核可以理解为描述)上的响应,作为图像的特征。
他们的联系在于形成图像在同一层次不同基上的描述。
来源:CSDN
作者:hwblittlebird
链接:https://blog.csdn.net/hwblittlebird/article/details/103804272