zoukankan      html  css  js  c++  java
  • 【深度学习】caffe 中的一些参数介绍

    一个优秀的算法工程师51%的时间在调参数,48%的时间在测试模型,剩下的1%时间再写代码。
    

    段子虽然是网上看来的,但调参数是真的心碎。像我这样的小萌新更是觉得无从下手。只有知己知彼(了解每个参数的含义),才能百战百胜。
    本文参考自仙道菜的博客,小部分自己的理解与修改。

    caffe 参数介绍

    solver.prototxt

    net: "models/bvlc_alexnet/train_val.prototxt" 
    test_iter: 1000       # 
    test_interval: 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: GPU      # 使用的模式是GPU
    

    test_iter:
    在测试的时候,需要迭代的次数,即test_iter* batchsize(测试集的)=测试集的大小,测试集的 batchsize可以在prototx文件里设置。

    test_interval:
    训练的时候,每迭代test_interval次就进行一次测试。

    momentum:
    灵感来自于牛顿第一定律,基本思路是为寻优加入了“惯性”的影响,这样一来,当误差曲面中存在平坦区的时候,SGD可以更快的速度学习。
    wi←m∗wi−η∂E∂wi

    train_val.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
        }
    }
    
    layer {
        name: "data"
        type: "Data"
        top: "data"
        top: "label"
        include {
            phase: TEST # 测试阶段
        }
        transform_param {
            mirror: false # 是否做镜像
            crop_size: 227
            # 减去均值文件
            mean_file: "data/ilsvrc12/imagenet_mean.binaryproto"
        }
        data_param {
            source: "examples/imagenet/ilsvrc12_val_lmdb"
            batch_size: 50
            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
    丢弃数据的概率

  • 相关阅读:
    Matlab---绘制柱状图
    认识Caffe与Caffe2
    Matlab---绘图及其位置摆放
    Matlab---三维视图的自动旋转
    Matlab---读取 .txt文件
    Matlab---画图线型、符号及颜色
    day 28 黏包及黏包解决方案
    day 27
    day 26 网络知识 01
    day 25 模块与包
  • 原文地址:https://www.cnblogs.com/guweixin/p/10439881.html
Copyright © 2011-2022 走看看