Caffe中各层的参数问题

1. solver中的参数

net: "models/bvlc_alexnet/train_val.prototxt" 
test_iter: 1000       # 与batch_size结合起来
test_interval: 1000   # 每1000次进行一次测试
base_lr: 0.01         # 开始的学习率
lr_policy: "step"     # 学习率的drop是以gamma在每一次迭代中
gamma: 0.1
stepsize: 100000      # 每stepsize的迭代降低学习率:乘以gamma
display: 20           # 没display次打印显示loss
max_iter: 450000      # train 最大迭代max_iter 
momentum: 0.9         #
weight_decay: 0.0005  #
snapshot: 10000       # 每迭代snapshot次,保存一次快照
snapshot_prefix:   "models/bvlc_reference_caffenet/caffenet_train" #快照保存地址
solver_mode: CPU      # 使用的模式是CPU 

其中重要的几个参数:

  1. test_iter*batch_size=数据集的大小(epoch),执行完一次全部数据,称为一个epoch

  2. base_lr
    lr_policy
    gamma
    stepsize
    这几个参数结合一起理解

    base_lr初始学习率,一般在0.01~0.001之间
    lr_policy可以设置为下面这些值:

    • fixed: 保持base_lr不变.
    • step: 如果设置为step,则还需要设置一个stepsize, 返回 base_lr * gamma ^ (floor(iter / stepsize)),其中iter表示当前的迭代次数
    • exp: 返回base_lr * gamma ^ iter, iter为当前迭代次数
    • inv:如果设置为inv,还需要设置一个power, 返回base_lr * (1 + gamma * iter) ^ (- power)
    • multistep: 如果设置为multistep,则还需要设置一个stepvalue。这个参数和step很相似,step是均匀等间隔变化,而multistep则是根据stepvalue值变化
    • poly: 学习率进行多项式误差, 返回 base_lr (1 - iter/max_iter) ^ (power)
    • sigmoid: 学习率进行sigmod衰减,返回 base_lr ( 1/(1 + exp(-gamma * (iter - stepsize)))
  3. momentum:0.9
    

    上一次梯度更新的权重

  4. weight_decay:0.005
    

    正则项,权重衰减,防止过拟合

  5.  type:SGD
    

    优化算法选择
    到目前为止,caffe总共提供了六种优化方法:

    • Stochastic Gradient Descent (type: “SGD”),
    • AdaDelta (type: “AdaDelta”),
    • Adaptive Gradient (type: “AdaGrad”),
    • Adam (type: “Adam”),
    • Nesterov’s Accelerated Gradient (type: “Nesterov”) and
    • RMSprop (type: “RMSProp”)

具体优化方法描述

train.prototxt

layer { # 数据层
    name: "data"
    type: "Data"
    top: "data"
    top: "label"
    include {
        phase: TRAIN # 表明这是在训练阶段才包括进去
    }
    transform_param { # 对数据进行预处理
        mirror: true # 是否做镜像
        crop_size: 227 #对图片进行裁剪
        # 减去均值文件
        mean_file: "data/ilsvrc12/imagenet_mean.binaryproto"
    }
    data_param { # 设定数据的来源
        source: "examples/imagenet/ilsvrc12_train_lmdb"
        batch_size: 256
        backend: LMDB
    }
}
  • lr_mult
    学习率,但是最终的学习率需要乘以solver.prototxt 配置文件中的 base_lr .

    如果有两个 lr_mult, 则第一个表示 weight 的学习率,第二个表示 bias 的学习率
    一般 bias 的学习率是 weight 学习率的2倍
    
  • decay_mult
    权值衰减,为了避免模型的over-fitting,需要对cost function加入规范项。
    wi←wi−η∂E∂wi−ηλwi

  • num_output
    卷积核(filter)的个数

  • kernel_size
    卷积核的大小。

    如果卷积核的长和宽不等,需要用 kernel_h 和 kernel_w 分别设定
    
  • stride
    卷积核的步长,默认为1。也可以用stride_h和stride_w来设置。

  • pad
    扩充边缘,默认为0,不扩充

      扩充的时候是左右、上下对称的,比如卷积核的大小为5*5,那么pad设置为2,
      则四个边缘都扩充2个像素,即宽度和高度都扩充了4个像素,这样卷积运算之后的特征图就不会变小。
      也可以通过pad_h和pad_w来分别设定。
    
  • weight_filler
    权值初始化。 默认为“constant”,值全为0.
    很多时候我们用”xavier”算法来进行初始化,也可以设置为”gaussian”

weight_filler {
    type: "gaussian"
    std: 0.01
}
  • bias_filler
    偏置项的初始化。一般设置为”constant”, 值全为0。
bias_filler {
    type: "constant"
    value: 0
}
  • bias_term
    是否开启偏置项,默认为true, 开启

  • group
    分组,默认为1组。如果大于1,我们限制卷积的连接操作在一个子集内。
    卷积分组可以减少网络的参数,至于是否还有其他的作用就不清楚了。

     每个input是需要和每一个kernel都进行连接的,但是由于分组的原因其只是与部分的kernel进行连接的如: 
     我们根据图像的通道来分组,那么第i个输出分组只能与第i个输入分组进行连接。
    
  • pool
    池化方法,默认为MAX。目前可用的方法有 MAX, AVE, 或 STOCHASTIC

  • dropout_ratio
    丢弃数据的概率

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值