Local Response Normalization,其作用是实现“侧抑制”。
bix,y=aix,y/(b+α∑j=max(0,i−r)min(i+r,n−1)a2x,y)β
在channel维度上进行抑制,从公式中可以看出 ax,y 周围2*r+1个神经元的激活会对 ax,y 产生抑制效果。
在tensorflow和caffe中由不同的实现公式
tensorflow中的实现方式就是上述公式的实现,文档中是这样解释的:
sqr_sum[a, b, c, d] =sum(input[a, b, c, d - depth_radius : d + depth_radius + 1] ** 2)
output = input / (bias + alpha * sqr_sum) ** beta
local_response_normalization(
input,
depth_radius=5,
bias=1,
alpha=1,
beta=0.5,
name=None
)
其参数depth_radius为公式中的r,bias为b。
而caffe中略有不同,其实现公式为:
bix,y=aix,y/(1+α/m∑j=max(0,i−m/2)min(i+m/2,n−1)a2x,y)β
其中的m对应第一个公式中的2*r+1
caffe参数中的local_size对应m,所以这个参数是和tensorflow的depth_radius是不同的,其关系为local_size = 2*depth_radius + 1,因此local_size必须为奇数。
而且实际上平方和项的系数是不同的,tensorflow的系数就是函数的参数alpha,而caffe的系数实际上要将定义的alpha参数除以local_size的大小
总结一下tensorfow和caffe的两点不同
1.local_size和depth_radius不是对应的,其关系为local_size = 2*depth_radius + 1
2.alpha的定义caffe要在实际的系数上乘以local_size
因此caffe中的模型不能轻易得将参数直接拿过来用,需要做一下转换。当然如果用caffe-tensorflow的话参数关系会自动转换。