背景文档
1、首先先了解一下 什么是过拟合和欠拟合?by Panda.X
2、下面简单说一下LRN,全称Local Response Normalization (局部响应归一化函数),是一种防止过拟合的方法,一般在激活层之后使用。这个函数很少使用,基本上被类似Dropout这样的方法取代。详细算法说明请参考【深度学习技术】LRN 局部响应归一化 by CrazyVertigo
Tensorflow官方文档中的tf.nn.lrn函数给出了局部响应归一化的论文出处
详见 http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks
LRN计算公式
下面结合tf.nn.lrn()的参数来解释一下其中的变量。
- 公式中的a表示函数的输入Tensor,即input:一个4D-Tensor,[ batch, height, width, channel],数据类型可以是 half,bfloat16, float32
- k 对应参数bias:偏移值,用于避免分母等于0, 默认值为1,
- 通常设positive float,也可以设为None(取默认值)。
- 若值<=0, output中可能出现nan
- α 对应参数alpha:缩放因子,默认值为1,通常设positive float,也可以设为None(取默认值)。
- β 对应参数beta:指数,默认值为0.5,float类型,也可以设为None(取默认值)。
- n /2 对应参数depth_radius:用于定义邻域长度,默认值为5,int类型(positive),也可以设为None(取默认值)。
- i:指的是channel,也就是说累加操作是沿着输入Tensor的channel方向进行的。
- N:表示通道总数,即channel值。
就是一个点沿着channel方向(前 depth_radius + 后depth_radius)的点的平方加,乘以alpha,即 sqr_sum[a, b, c, d] = sum(input[a, b, c, d - depth_radius : d + depth_radius + 1] ** 2)
output = input / (bias + sqr_sum)** beta
def lrn(input, depth_radius=5, bias=1, alpha=1, beta=0.5, name=None
)