solver.prototxt文件里面参数含义及其设置

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

#caffe train --solver=*_solver.prototxt

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

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

net:"examples/myfile/train_val.prototxt"

test_iter:10

test_interval:50

base_lr:0.001

lr_policy:"step"

gamma:0.1

stepsize:100

momentum:0.9

display:20

max_iter:500

snapshot:40

snapshot_prefix:"examples/myfile"

weight_decay:0.005

solver_mode:GPU

接下来,我们对每一行进行解析:

net:"examples/myfile/train_val.prototxt"

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


接下来第二行代码:

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

multistep示例:

base_lr:0.01

momentum:0.9

weight_decay:0.0005

lr_policy:"multistep"

gamma:0.9

stepvalue:5000

stepvalue:7000

stepvalue:8000

stepvalue:9000

stepvalue:9500

下一行代码解析:

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,不保存。

也可以设置snapshot_format,保存的类型。有两种选择:HDF5和BINARYPROTO,默认为BINARYPROTO

weight_decay:0.005

权重衰减项,防止过拟合的一个参数

solver_mode:GPU

设置运行模式。默认为GPU,如果你没有GPU,则需改成CPU,否则会出错。

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


你可能感兴趣的:(caffe)