caffe训练模型时solver.prototxt文件中超参数的设置

solver 是caffe的核心之重,它是整个模型运行的参数配置文件。运行代码一般为:

#caffe train --solver=*_solver.prototxt

在DL中,损失函数(loss function)是非凸的,没有解析解,我们需要通过优化的方法来求解。solver的作用就是交替调用前向(forward)算法和后向(backward)算法来更新参数,从而最小化损失(loss),实际上就是一种迭代的优化算法。

接下来,我们看一个实例:

net:"examples/myfile/train_val.prototxt"      //设置深度网络模型。每一个模型就是一个net,需要在一个专门的配置文件中对net进行配置,每个net由许多的layer所组成。上面这句代码就是设置训练网络的,网络模型文件配置,即examples/myfile/文件下的train_val.prototxt里面的配置。

batchsize     //每迭代一次,网络训练图片的数量,例如:如果你的batchsize=256,则你的网络每迭代一次,训练256张图片;则,如果你的总图片张数为1280000张,则要想将你所有的图片通过网络训练一次,则需要1280000/256=5000次迭代。

epoch    //表示将所有图片在你的网络中训练一次所需要的迭代次数,如上面的例子:5000次;我们称之为  一代。所以如果你想要你的网络训练100代时,则你的总的迭代次数为max_iteration=5000*100=500000次;

test_iter:10  //这个要与train layer 中的batch_size结合起来理解。训练数据中测试样本总数为400,一次性执行全部数据的效率太低,因此我将测试数据分成几个批次来执行,每个批次的数量就是batch_size。本文,我将batch_size设置为40,则需要迭代10次才能将400个数据全部执行完。因此test_iter设置为10.执行完一次全部数据,称之为一个epoch.

test_interval: 50   //测试间隔。也就是每训练50次,才进行一次测试。

base_lr:0.001

lr_policy:"step"

gamma:0.1

stepsize:100

//这四行可以放在一起理解,用于学习率的设置。只要是梯度下降法来求解优化,都会有一个学习率,也叫步长。base_lr用于设置基础学习率,在迭代的过程中,可以对基础学习率进行调整。怎样进行调整,就是调整的策略,由lr_policy来设置。

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:学习率进行sigmoid衰减,返回base_lr(1/(1+exp(-gamma*(iter-stepsize))))

momentum:0.9        //上一次梯度更新的权重。

display:20      //训练20次,在屏幕显示一次。如果设置为0,则不显示。

max_iter:500    //最大迭代次数。这个参数设置太小,会导致没有收敛,精确度很低。设置太大,会导致震荡,浪费时间。

snapshot:40

snapshot_prefix:"examples/myfile"

//保存快照。将训练出来的model和solver状态进行保存,snapshot用于设置训练多少次后进行保存,默认为0,不保存。snapshot_prefix:设置保存路径。还可以设置snapshot_diff,是否保存梯度值,默认为false,不保存。

weight_decay:0.005   //权重衰减项,防止过拟合的一个参数。
solver_mode:GPU   //设置运行模式。默认为GPU,如果你没有GPU,则需改成CPU,否则会出错。

注意:以上的所有参数均为可选参数,都有默认值,根据solver(type)方法的不同,还有一些其他的参数,大家根据自己的需要自己设置。

参考:https://blog.csdn.net/qq_27923041/article/details/55211808

你可能感兴趣的:(caffe训练模型时solver.prototxt文件中超参数的设置)