Caffe入门:lr_mult和decay_mult参数说明

一、Caffe网络定义:lr_mult和decay_mult

通常在 Caffe 的网络定义中,某些 layer 会有如下参数:

param {
        lr_mult: x
        decay_mult: y
}
  • 当令 lr_mult = x 时,相当于该层的学习率为 solver.prototxt 中的 base_lr * x;
  • 特别地,当 lr_mult = 1 时,相当于该层的学习率就是 base_lr;
  • 当 lr_mult = 0 时,相当于固定该层的权重,不需要学习;
  • 当没有设置 lr_mult 和 decay_mult 时,默认等于 1,也就是该层的参数按照 base_lr 进行学习;

如果看到某一层 lr_mult 和 decay_mult 都设为 0,就要考虑该层的参数不是通过更新权重得到的(也就是非学习来的),所以需要均设为 0。

二、Caffe中的decay_mult怎么理解呢?

       decay_mult是正则化的权重,防止过拟合用的。为了防止模型参数太复杂导致过拟合,一般在目标函数计算的时候加入了正则项,所谓的weight_decay其实就是正则项前面的那个权值,设置偏大可以令模型在学习过程中约束参数的复杂程度。

而在caffe当中,除了全局设置的学习率lr和权重衰减项也就是weight_decay,每一个需要学习参数的layer都还有局部的加权值,分别是lr_mult和decay_mult,而对于卷积层的话,w和b都属于可以学习的参数,所以在学习更新中他们都有属于自己的lr_mult和decay_mult。

 

三、Caffe中batchnormal层的参数lr_mult和decay_mult都为0的原因

如下截取一部分train.prototxt的片段:

layer {

  name: "conv2_em/bn"

  type: "BatchNorm"

  bottom: "conv2_em"

  top: "conv2_em"

  param {

    lr_mult: 0

    decay_mult: 0

  }

  param {

    lr_mult: 0

    decay_mult: 0

  }

  param {

    lr_mult: 0

    decay_mult: 0

  }

}

可以看到这一层是batchnormal层,其中的参数设置,三个param中的lr_mult和decay_mult都设置为0。

原因如下:

       caffe中的batchnormal层中有三个参数:均值、方差和滑动系数,训练时这三个参数是通过当前的数据计算得到的,并且不通过反向传播更新,因此必须将lr_mult和decay_mult都设置为0,因为caffe中这两个参数缺省值是默认为1;如果为1,则会通过反向传播更新该层的参数,这显然是错误的做法。

       此外,对于参数use_global_stats:如果为真,则使用保存的均值和方差,否则采用滑动平均计算新的均值和方差。该参数缺省的时候,如果是测试阶段则等价为真,如果是训练阶段则等价为假(采用滑动平均计算新的均值和方差)。

moving_average_fraction:滑动平均的衰减系数,默认为0.999

eps:分母附加值,防止除以方差时出现除0操作,默认为1e-5(不同框架采用的默认值不一样)

更重要的一点:由于BN层中会做归一化处理,因此BN层前的那个卷积层应当将bias关闭。因为BN的操作会做一个减去均值的操作,因此卷积层有没有bias都会被这个减法操作去除掉,所以这时候bias不起作用,因此将其关闭可以减少参数量且不影响模型准确率。

convolution_param {
    num_output: 32
    bias_term: false
    pad: 1
    kernel_size: 3
    stride: 2
    weight_filler {
        type: "msra"
    }
}

同时,由于caffe中,Scale层不需要对两个参数正则化(Scale层是做标准化或者去除均值和方差缩放,和正则化没有关系),所以设置如下:

param {
  lr_mult: 1
  decay_mult: 0
}
param {
  lr_mult: 1
  decay_mult: 0
}

 

四、Caffe中scale层参数说明

scale_param {
    filler {
      value: 1  //alpha
    }
    bias_term: true
    bias_filler {
      value: 0 //beta
    }
  }

参考链接:

https://blog.csdn.net/qq_38451119/article/details/82663649

https://blog.csdn.net/hjxu2016/article/details/81813535

https://blog.csdn.net/qq_38469553/article/details/84789556

https://github.com/shicai/DenseNet-Caffe/issues/24

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值