LRN在caffe和tensorflow中的不同实现

来源:互联网 发布:aws 阿里云 价格 编辑:程序博客网 时间:2024/05/16 09:38

Local Response Normalization,其作用是实现“侧抑制”。

bix,y=aix,y/(b+αj=max(0,ir)min(i+r,n1)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) ** betalocal_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+α/mj=max(0,im/2)min(i+m/2,n1)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的话参数关系会自动转换。