caffe 常用命令及学习心得

1. finetune

    finetune的过程相当于继续训练,跟直接训练的区别是初始化的时候:
    a. 直接训练是按照网络定义指定的方式初始化(如高斯随机初始化)
    b. finetune是用你已经有的参数文件来初始化(就是之前训练好的caffemodel)

./build/tools/caffe train -solver examples/money_test/fine_tune/solver.prototxt -weights models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel

2. 固定层参数

    固定某层前参数,在该层加

    propagate_down : 0

3.设置sover文件参数

    gamma
        这个参数表示学习率每次的变化程度,值为实数。
    stepsize
        这个参数表示什么时候应该进行训练的下一过程,值为正整数。主要用在lr_policy为step的情况。
    stepvalue
        这个参数表示什么时候应该进行训练的下一过程,值为正整数。主要用在lr_policy为multistep的情况。
    max_iter
        这个参数表示训练神经网络迭代的最大次数,值为正整数。
    momentum
        这个参数表示在新的计算中要保留的前面的权重数量,值为真分数,通常设为0.9。
    weight_decay
        这个参数表示对较大权重的惩罚(正则化)因子。值为真分数。
    solver_mode
        这个参数用来表示求解神经网络的模式——值为CPU or GPU。
    snapshot
        这个参数用来表示每迭代多少次就应该保存snapshot的model和solverstate,值为正整数。
    snapshot_prefix:
        这个参数用来表示保存snapshot时model和solverstate的前缀,值为带引号的字符串。
    net:
        这个参数表示训练网络所在的位置,值为带引号的字符串。
    test_iter
        这个参数表示每个test_interval进行多少次test迭代,值为正整数。
    test_interval
        这个参数表示什么时候进行数据的测试,值为正整数。
    display
        这个参数用来表示什么时候将输出结果打印到屏幕上,值为正整数,表示迭代次数。
    type
        这个参数表示训练神经网络采用的反向传播算法,值为带引号的字符串。可选的值有:
        Stochastic Gradient Descent “SGD”——随机梯度下降,默认值。
        AdaDelta “AdaDelta”——一种”鲁棒的学习率方法“,是基于梯度的优化方法。
        Adaptive Gradient “AdaGrad”——自适应梯度方法。
        Adam “Adam”——一种基于梯度的优化方法。
        Nesterov’s Accelerated Gradient “Nesterov”——Nesterov的加速梯度法,作为凸优化中最理想的方法,其收敛速度非常快。
        RMSprop “RMSProp”——一种基于梯度的优化方法。

    r_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))))

note:

 batch_size 尽量选8的倍数。
一个epoch的意思就是迭代次数*batch的数目 和训练数据的个数一样,就是一个epoch
一般在finetune时学习率一般设置在1e-5


4.画网络结构图

draw_net.py执行的时候带三个参数: 
    第1个参数:网络模型的prototxt文件 
    第2个参数:保存的图片路径及名字 
    第3个参数:–rankdir=x , x 有四种选项,分别是LR, RL, TB, BT,默认为LR 。用来表示网络的方向,分别是从左到右,从右到左,从上到小,从下到上。


具体步骤:

    进入到caffe根目录里的python ,在终端输入:
python draw_net.py 1.prototxt original.png


5.运行时生成.log文件

在caffe根目录下建立一个bash文件,写入以下:

#!/usr/bin/env sh
set -e
now=$(date +"%Y%m%d_%H%M%S")
/home/hulu/caffe_mul/build/tools/caffe \
train \
--solver=solver.prototxt \
-weights /home/hulu/vgg_face_recognition/ss2/webface_fr_tiny_vgg_iter_250000.caffemodel \
2>&1|tee train_$now.log &

6.画损失曲线图

    1)先进入/home/hulu/caffe_mul/tools/extra路径
    2)在命令行中运行./plot_training_log.py.example 0 save.png 1.log


7.caffe 数据

    Caffe的数据接口主要有原始图像(ImageData), HDF5, LMDB/LevelDB。由于Caffe自带的图像转LMDB接口只支持但label,对于多label的任务,往往需要使用HDF5。

    因为我用的输入数据比较多,为了方便起见,修改caffe-master使得ImageData支持多标签。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值