BatchNorm层训练和测试的注意事项

1:BatchNormal层:

BN层的设定一般是按照conv->bn->scale->relu的顺序来形成一个block。

关于bn,有一个注意点,caffe实现中的use_global_stats参数在训练时设置为false,测试时设置为true。

因为在训练时bn作用的对象是一个batch_size,而不是整个训练集,如果你没有将其设置为false,则有可能造成bn后数据更加偏离中心点,导致nan或87.3365的问题。所以你可以尝试一下修改这个参数。

2:如何在RGB数据集上训练灰度图模型

把第一层卷积层改个名字就可以,貌似finetuning初始化模型是根据prototxt里面的layer的name初始化的,只有第一层blob的shape不同,所以第一层就不复制,直接随机初始化就行了
然后再慢慢finetune,速度上基本上没影响。

3:dropout层

训练的时候,我们通常设定一个dropout ratio = p,即每一个输出节点以概率 p 置0(不工作)。假设每一个输出都是相互独立的,每个输出都服从二项伯努利分布B(1-p),则大约认为训练时只使用了 (1-p)比例的输出。

测试的时候,最直接的方法就是保留Dropout层的同时,将一张图片重复测试M次,取M次结果的平均作为最终结果。假如有N个节点,则可能的情况为R=2^N,如果M远小于R,则显然平均效果不好;如果M≈N,那么计算量就太大了。因此作者做了一个近似:可以直接去掉Dropout层,将所有输出都使用 起来,为此需要将尺度对齐,即比例缩小输出 r=r*(1-p)。 
即如下公式: 
这里写图片描述 
特别的, 为了使用方便,我们不在测试时再缩小输出,而在训练时直接将输出放大1/(1-p)倍,代码中已经实现。

结论: Dropout得到了广泛的使用,但具体用到哪里、训练一开始就用还是后面才用、dropout_ratio取多大,还要自己多多尝试。有时添加Dropout反而会降低性能。






  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值