Caffe源码里自带的VisionLayer有三种:
(1)ConvlutionLayer
(2)PoolingLayer
(3)LocalResponseNormalizationLayer
前两种在(四)的实例中有过介绍,这里主要讲述第三种LRN,来源于2012AlexNet的局部归一化层。AlexNet认为,LRN层模仿生物神经系统的侧抑制机制,对局部神经元的活动创建竞争机制,使得响应比较大的值相对更大,提高模型泛化能力。
不过这个层有的说有用,有的说无用,这里就先大致了解一下,具体在系统学习。
不过最新的GoogleNet以及ResNet好像都没有再使用这种Layer了,可能已经被抛弃。。。
LRN的具体做法如下
其中,代表该层的输入数据,表示第i个kernel作用在(x,y)上得到的结果,也即LRN层的输入数据,代表LRN的输出数据
N表示输入的数据层数,也即上一卷积层或池化层Kernel的个数,n表示可调的用于局部归一化的相邻层的个数
可调的超参数有,常设值为2,5,0.0001,0.75
该层的参数设置实例:
layers {
name: "norm1"
type: “LRN”
bottom: "pool1"
top: "norm1"
lrn_param {
local_size: 5
alpha: 0.0001
beta: 0.75
}
}
其中local_size表示n,alpha与beta分别表示另外两个参数