caffe 中为啥bn层要和scale层一起使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了caffe 中为啥bn层要和scale层一起使用相关的知识,希望对你有一定的参考价值。
1) 输入归一化 x_norm = (x-u)/std, 其中u和std是个累计计算的均值和方差。
2)y=alpha×x_norm + beta,对归一化后的x进行比例缩放和位移。其中alpha和beta是通过迭代学习的。
那么caffe中的bn层其实只做了第一件事,scale层做了第二件事,所以两者要一起使用。
一,在Caffe中使用Batch Normalization需要注意以下两点:
1. 要配合Scale层一起使用。
2. 训练的时候,将BN层的use_global_stats设置为false,然后测试的时候将use_global_stats设置为true。
二,基本公式梳理:
Scale层主要完成 top=alpha∗bottom+betatop=alpha∗bottom+beta的过程,则层中主要有两个参数alphaalpha与betabeta,
求导会比较简单。∂y∂x=alpha;∂y∂alpha=x;∂y∂beta=1。 需要注意的是alphaalpha与betabeta均为向量,针对输入的channelschannels进行的处理,因此不能简单的认定为一个floatfloat的实数。
三,具体实现该部分将结合源码实现解析scalescale层:
在Caffe proto中ScaleParameter中对Scale有如下几个参数:
1,基本成员变量,基本成员变量主要包含了Bias层的参数以及Scale层完成对应通道的标注工作。
2,基本成员函数,主要包含了LayerSetup,Reshape ,Forward和Backward ,内部调用的时候bias_term为true的时候会调用biasLayer的相关函数。
3,Reshape 调整输入输出与中间变量,Reshape层完成许多中间变量的size初始化。
4,Forward 前向计算,前向计算,在BN中国紧跟着BN的归一化输出,完成乘以alpha与+bias的操作,由于alpha与bias均为C的向量,因此需要先进行广播。
5,Backward 反向计算,主要求解三个梯度,对alpha 、beta和输入的bottom(此处的temp)。
参考技术A 这个问题首先你要理解batchnormal是做什么的。它其实做了两件事。1) 输入归一化 x_norm = (x-u)/std, 其中u和std是个累计计算的均值和方差。
2)y=alpha×x_norm + beta,对归一化后的x进行比例缩放和位移。其中alpha和beta是通过迭代学习的。
那么caffe中的bn层其实只做了第一件事。scale层做了第二件事。
这样你也就理解了scale层里为什么要设置bias_term=True,这个偏置就对应2)件事里的beta。
我在网上讲caffe,欢迎来听讲。本回答被提问者采纳
以上是关于caffe 中为啥bn层要和scale层一起使用的主要内容,如果未能解决你的问题,请参考以下文章