caffe中关于train_val.prototxt和solver.prototxt设置的一些心得

来源:互联网 发布:如何提高自制力 知乎 编辑:程序博客网 时间:2024/06/05 20:10

train_val.prototxt首先要修改的就是mean_file和data_param里面source的路径;

data层中有两个transform_param,如下图。只需要用到其中一个,当选择镜像操作时把mirror那边改为true,三个mean_value分别表示三个通道:


下面的batch_size(由于样本数据一般比较大,一次性执行全部数据效率很低,需要分成多个批次来处理,batch_size是每批次处理的数据量),网络原始的参数是256,显卡比较弱的会显示内存不足,我个人的显卡是GTX960,改成64出现如下情况,后面改成16才顺利跑了起来


其他的也没啥要改的,不过最后一个InnerProduct层的num_output需要改成自己的类别数


solver.prototxt文件是caffe核心的核心,协调整个模型的运作,它是caffe程序运行中比带的一个参数文件;

solver的作用是交替执行前向和后向算法来更新参数,最小化loss,是严格迭代的算法;

solver的流程如下:

1、调用train_val.prototxt设计优化对象、训练网络和测试网络;

2、通过forward和backward迭代优化更新参数;

3、根据test_interval定期评价测试网络;

4、优化过程中显示模型和solver的状态;

每一步迭代,solver的工作如下:

1、调用forward算法来计算最终的输出值,以及对应的loss;

2、调用backward算法来计算每层的梯度;

3、根据选用的solver方法,利用梯度进行参数更新;

4、保存并记录每次迭代的学习率、快照和对应的状态;

其配置文件如下:


基本上都是根据自己的需要修改相应的参数,这里主要说一下lr_policy:

“step”:设置了step,还要设置一个stepsize,返回base_lr*gamma^(floor(iter/stepsize)),其中iter表示当前迭代次数;

“fixed”:固定不变;

“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);

“sigmod”:学习率进行sigmod衰减,返回base_lr(1/(1+exp(-gamma*(iter-stepsize))))

另外,个人觉得要注意还有:

一、我的训练正负样本各2000,总共:4000;batch_size:16;将所有样本处理完一次(一个epoch)需要:               4000/16=250次迭代才能完成;

       所以将test_interval设置为300,即处理完一次所有的训练数据后才去进行测试。这个数要大于等于250

       如果想迭代100代(100个epoch),则最大迭代次数为25000;

二、测试样本正负各400,总共:800;batch_size:16;测试一次需:800/16=50;

        所以test_iter为50;这个数要大于等于50;

三、学习率变化规律我们设置为随着迭代次数的增加,慢慢变低。总共迭代25000次,变化5次的情况下,将stepsize         设置为:25000/5=5000;即每迭代5000次,降低一次学习率;

        stepsize不能太小,如果太小会导致学习率再后来越来越小,达不到充分收敛的效果。


阅读全文
0 0