BatchNorm.md 1.8 KB
Newer Older
S
sunyanfang01 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
## BatchNorm


### [BatchNorm](http://caffe.berkeleyvision.org/tutorial/layers/batchnorm.html)
```
layer {
    name: "bn"
    type: "BatchNorm"
    bottom: "data"
    top: "bn"
    batch_norm_param{
        use_global_stats: true
    	moving_average_fraction: 0.999
    	eps: 0.00001
    }
}
```


### [paddle.fluid.layers.batch_norm](http://paddlepaddle.org/documentation/docs/zh/1.3/api_cn/layers_cn.html#permalink-36-batch_norm)
```python
paddle.fluid.layers.batch_norm(
    input, 
    act=None, 
    is_test=False, 
    momentum=0.9, 
    epsilon=1e-05, 
    param_attr=None, 
    bias_attr=None, 
    data_layout='NCHW', 
    in_place=False, 
    name=None, 
    moving_mean_name=None, 
    moving_variance_name=None, 
    do_model_average_for_mean_and_var=False, 
    fuse_with_relu=False, 
    use_global_stats=False
)
```  

### 功能差异
#### 输出结果的差异
Caffe:输出只是单纯的使用均值和方差进行归一化计算,没有缩放变换这一过程,若要完成后面这一过程需要搭配Scale层进行使用。  
PaddlePaddle:完成了归一化和缩放变换两个过程,是完整的一个Batch Normalization过程。


#### 输入参数的差异
Caffe:共需要3个输入参数:均值向量、方差向量、滑动系数。    
PaddlePaddle:共需要4个输入参数:均值向量、方差向量、缩放变量`param_attr`和缩放变量`bias_attr`
#### 计算方式的差异
Caffe:输入的均值和方差都需要与滑动系数进行计算得出新均值和方差,再进行归一化处理。    
PaddlePaddle:直接使用输入的均值和方差进行归一化处理。


#### 其他差异
Caffe:激活函数需要由另外一层完成。  
PaddlePaddle:可以通过设置`act``fuse_with_relu`看是否在进行Batch Normalization后进行激活函数的操作。