• caffe杂


    一、finetune命令:

    mpirun  /home/zhangsuosheng/caffe_mpi/build/tools/caffe train -solver solver.prototxt -gpu all -weights ShuffleNet-0.25x-g3-highacc/model_head.bin

    二、快照命令:

    mpirun /home/zhangsuosheng/caffe_mpi/build/tools/caffe train -solver solver.prototxt -gpu all -snapshot snapshot/_iter_41000.solverstate

    三、待修改:

    1、train.prototxt中

    train的input层:

    train的input路径,包括图片的prefix和train.txt的绝对路径;train的batch_size

    test的input层:

    test的input路径,包括图片的prefix和test.txt的绝对路径;test的batch_size

    2、solver.prototxt中

    train.prototxt的路径(net)

    test的迭代次数(test_iter)

    训练多少代测试一次(test_interval)(测试一次将用完所有测试数据,所需测试数据数=test_iter*测试的batch_size)

    训练多少代保存一次快照(snapshot)

    snapshot的存储路径(snapshot_prefix)

     四、技巧

    snapot实际与.bin一样,都是参数文件

    如果网络变了bin文件是要变的。

    但是我们在使用一些net时,例如googlenet、resnet、shufflenet,

    我们不太会修改这些net结构,而是对输入以及其后面的一些层做改动,因此训练的时候是可以直接使用finetune参数的

    分成多个branch

    每个branch对应一个输入,使用一个net(例如googlenet shufflenet),产生一个feature

    然后可以做多种尝试,例如讲feature加起来后面接一个fc,也可以每个feature单独处理

    五、各层

    1、silence层:

    假如有某一层的某个top后面没有bottom,caffe训练的时候就会把这些top的结果都print出来,用Silence layer就是为了把接住以防止它print

    例如:

    通过修改网络将原来的多个分支改成了只有一个分支(head),但是但是因为label数据还是所有的,所以需要将不需要的label输入到silence,否则就会想上图这样print出来,很难看,因此加一个silence layer屏蔽掉label_eye_lo和label_eye_la

    layer {
      name: "slice"
      type: "Slice"
      bottom: "label"
      top: "label_head_lo"
      top: "label_head_la"
      top: "label_eye_lo"
      top: "label_eye_la"
      slice_param {
        axis: 1
        slice_point: 1
        slice_point: 2
        slice_point: 3
      }
    }
    layer {
      name: "silence_eye"
      type: "Silence"
      bottom: "label_eye_lo"
      bottom: "label_eye_la"
    }

     

    2、slice层:

    切片,例如某一层读入了多个branch的标签,则可以在后面跟一个slice层,切片后得到所需的标签,然后与output层做差得loss层

    3、bn层:batch normalization

    传统的神经网络,只是在将样本输入输入层之前进行标准化处理(减均值,除标准差),以降低样本间的差异性。BN是在此基础上,不仅仅只对输入层的输入数据进行标准化,还对隐藏层的输入进行标准化。

    https://blog.csdn.net/whitesilence/article/details/75667002

    https://arxiv.org/pdf/1502.03167.pdf

    lr_mult为学习率因子

    decay_mult为衰减因子

    4、inner_proudct层(内积层,其实就是全连接层)

    https://www.cnblogs.com/dupuleng/articles/4312149.html

    5、Eltwise 层(Eltwise层的操作有三个:product(点乘), sum(相加减) 和 max(取大值),其中sum是默认操作。)

    例如实现A-B

    layer 
    {
      name: "eltwise_layer"
      type: "Eltwise"
      bottom: "A"
      bottom: "B"
      top: "diff"
      eltwise_param {
        operation: SUM
        coeff: 1
        coeff: -1
      }
    }​

    https://www.cnblogs.com/kunyuanjushi/p/5937177.html

     六、注意事项

    注意shufflenet与shuffle的区别

    shuffle指的是乱序操作,一般我们在处理数据的时候会用到,在数据增强,生成input文件(输入图片url,标签)之后进行shuffle,然后将shuffle后的input文件输入网络

    python shuffle数据集:

    https://blog.csdn.net/orangefly0214/article/details/80352310

     一个层可以输出给多个层

    一个层也可以接受多个层的输入

    但是

    1个bottom只能对应1个top

    1个top只能对应0个或1个bottom(如果对应0个则会输出出来)

    /build/tools/caffe与caffe.cpp源文件:

    https://blog.csdn.net/teeyohuang/article/details/76778593

  • 相关阅读:
    虚拟机里的mysql怎么外连
    Pytest跳过执行之@pytest.mark.skip()详解大全
    判断字符是什么,返回True或者False
    s = "ajldjlajfdljfddd",去重并从小到大排序输出"adfjl"(sort与sorted、reverse与reversed的区别)
    1、输入一个姓名,判断是否姓王 2、strip和replace的用法
    python 运算符
    控制语句--while循环
    控制语句-if
    函数
    控制语句--for循环
  • 原文地址:https://www.cnblogs.com/zealousness/p/9551587.html
Copyright © 2020-2023  润新知