zoukankan      html  css  js  c++  java
  • 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,也就是该层的参数按照lase_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的原因

    可以看到这一层是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不起作用,因此将其关闭可以减少参数量且不影响模型准确率。

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

    parm{
         lr_mult: 1
         decay_mult: 0
    }
    param{
         lr_mult: 1
         decay_mult: 0
    }
  • 相关阅读:
    关于Response.End的亦常
    关于web.config
    本地打印机的设置
    xml的操作
    javascript定义对象的几种简单方法
    WindowsXP下共享无线网络设置步骤
    第四章:使用Rich控件
    第五章母版页
    第八章数据访问概述
    对lock(obj)中的obj的理解
  • 原文地址:https://www.cnblogs.com/zhibei/p/12875811.html
Copyright © 2011-2022 走看看