以SSD的solver.prototxt为例解释其中参数的含义。
train_net: "models/VGGNet/VOC0712/SSD_300x300/train.prototxt"
test_net: "models/VGGNet/VOC0712/SSD_300x300/test.prototxt"
test_iter: 619
test_interval: 10000
base_lr: 0.001
display: 10
max_iter: 120000
lr_policy: "multistep"
gamma: 0.1
momentum: 0.9
weight_decay: 0.0005
snapshot: 80000
snapshot_prefix: "models/VGGNet/VOC0712/SSD_300x300/VGG_VOC0712_SSD_300x300"
solver_mode: GPU
device_id: 0
debug_info: false
snapshot_after_train: true
test_initialization: false
average_loss: 10
stepvalue: 80000
stepvalue: 100000
stepvalue: 120000
iter_size: 1
type: "SGD"
eval_type: "detection"
ap_version: "11point"
train/test_net:训练/测试的模型文件路径。
test_iter:测试的时候需要迭代的次数。test_iter*batch_size(测试集)=测试集大小。caffe中的一次迭代指一个batch,而不是一张图片。
test_interval:指每迭代多少次进行一次测试。
base_lr:基础学习率。在优化的过程中,该参数的调整方式会根据lr_policy进行确定。
display:每迭代多少次显示一次结果。
max_iter:最大迭代次数。
lr_policy:学习策略。
- fixed:固定学习率basr_lr不变。
- inv:basr_lr=base_lr * (1 + gamma * iter) ^ (- power)
- step:basr_lr=base_lr * gamma ^ (floor(iter / step))
- exp:basr_lr=base_lr * gamma ^ iter
- multistep:与step类似,但step取决于stepvalue。
- poly:basr_lr=base_lr (1 - iter/max_iter) ^ (power)
- sigmoid:basr_lr=base_lr ( 1/(1 + exp(-gamma * (iter - stepsize))))
gamma:与学习率相关的参数,学习率什么时候衰减与stepsize(衰减步长)有关,而衰减多少则与gamma有关。衰减后的学习率lr=lr*gamma。
momentum:上一次梯度更新的权重。
weight_decay:权重衰减,防止过拟合。
snapshot:权重文件保存间隔。
snapshot_prefix:权重文件保存前缀。
solver_mode:优化模式。可选CPU模式或者GPU模式。
device_id:GPU序列号,默认从0开始。
debug_info:是否显示debug信息。
snapshot_after_train:是否在训练结束后保存一个snapshot文件。便于以后可以在此基础上继续训练。
test_initialization:确保内存可用并且输出loss的初始值。
average_loss:显示loss为之前average_loss个loss的平均值。
stepvalue:lr_policy为multistep时的stepsize。
iter_size:每处理iter_size*batch_size张图片后进行一次梯度计算。
type:优化算法的类型。
eval_type:评价类型。
ap_version:计算平均准确率的方法。有11point、MaxIntegral、Integral三种。