深度学习系列

it2025-02-12  9

深度学习总结系列

solver.prototxt 参数解析

对于caffe 来讲solver为其运行控制的核心,控制着整个模型的运作方式。

solver.prototxt

solver.prototxt 为caffe配置文件,里面定义了各种参数包括学习率,权重衰减、动量值等: net:"train_val.prototxt" test_iter: 266 test_interval: 1000 base_lr: 0.001 display: 100 max_iter: 50000 lr_policy: "multistep" gamma: 0.1 momentum: 0.9 weight_decay: 0.0005 snapshot: 1000 snapshot_prefix: "models/facedet" solver_mode: GPU device_id: 0 debug_info: false snapshot_after_train: true test_initialization: true average_loss: 10 stepvalue: 30000 stepvalue: 40000 stepvalue: 45000 iter_size: 2 type: "SGD" eval_type: "detection" ap_version: "11point" show_per_class_result:true

参数解析

net: 训练验证模型文件路径。

test_iter: 表示每训练完成一定次数后进行模型效果验证时的测试迭代次数。其表示把验证集中所有图片全部测试完成所需要的迭代次数。假设验证集图片数为val_num,验证时的batchsize为v_bsz,则test_iter = ceiling(val_num/ v_bsz),向上取整。

test_interval: 表示训练迭代多少次进行一次验证测试。一次迭代即一个batch的图片通过网络正向传播和反向传播的整个过程。一般来说,我们需要将训练集中所有图片都训练一遍,再对网络的准确率进行测试,即test_interval = train_num / train_bsz,但是不绝对,也可以设为一整数,比如1000等。

base_lr: 表示网络的基础学习率。学习率过高可能导致loss无法收敛等问题。过低的学习率会使网络收敛慢,也有可能导致梯度消失。一般我们设置为0.001。学习率和训练时的batchsize有关系,一般来讲batchsize越大,学习率也可以设置大一些。

display: 每多少次显示一次训练相关参数和结果。 max_iter: 训练最大迭代次数。以训练集中图片被反复训练学习100-200遍为宜,该参数可以设置为max_iter = (train_num / train_bsz)* 150。

lr_policy: 学习率变化策略。 lr_policy可以设置为下面这些值,相应的学习率的计算为: o - fixed: 保持base_lr固定不变. o - step: 如果设置为step,则还需要设置一个stepsize, 返回 base_lr * gamma ^ (floor(iter / stepsize)),其中iter表示当前的迭代次数 o - exp: 返回base_lr * gamma ^ iter, iter为当前迭代次数 o - inv: 如果设置为inv,还需要设置一个power, 返回base_lr * (1 + gamma * iter) ^ (- power) o - multistep: 如果设置为multistep,则还需要设置一个stepvalue。这个参数和step很相似,step是均匀等间隔变化,而multistep则是根据stepvalue值变化 o - poly: 学习率进行多项式误差, 返回 base_lr (1 - iter/max_iter) ^ (power) o - sigmoid:学习率进行sigmod衰减,返回 base_lr ( 1/(1 + exp(-gamma * (iter - stepsize))))

gamma: 学习率变化比率。用于调整学习率的一个参数。 momentum: 本次模型权重梯度更新时,上一次梯度所占的权重,一般取值在0.5–0.99之间。通常设为0.9,momentum可以让使用SGD的深度学习方法更加稳定以及快速。

weight_decay: 权重衰减项,防止过拟合的一个参数。在损失函数中,weight decay是放在正则项(regularization)前面的一个系数,正则项一般衡量模型的复杂度,所以weight decay的作用是调节模型复杂度对损失函数的影响,若weight decay很大,则复杂的模型损失函数的值也就大,从而可以降低模型复杂度。

snapshot: 每多少次保存一次模型文件。即caffemodel。 snapshot_prefix: 设置模型文件保存路径。 solver_mode: 设置使用GPU还是CPU进行学习训练。 device_id: GPU序列号,默认从0开始。 debug_info: 是否显示debug信息。 snapshot_after_train: 是否在训练结束后保存一个snapshot文件,便于以后可以在此基础上继续训练。

test_initialization: 确保内存可用并且输出loss的初始值。 average_loss: 显示loss为average_loss个loss的平均值。 iter_size: 每处理iter_size*batch_size张图片后进行一次梯度计算,这个参数可以规避由于gpu不足而导致的batch_size的限制,因为你可以用多个iteration做到很大的batch,即使单次batch有限。 stepvalue: 多少次时学习率递减。 type: 优化算法的选择,一共有六种可选:SGD、AdaDelta、AdaGrad、Adam、Nesterov和RMSProp。默认为SGD。 eval_type: 评价类型。 ap_version: 计算平均准确率的方法。有11point、MaxIntegral、Integral三种。 11point:是SSD在VOC2007中计算AP的方法,使用简单的均值计算 MaxIntegral:是VOC2012的最大值积分法 Integral:普通积分方法 show_per_class_result: 在终端输出每一类的AP(每一类的检测精度)信息。

最新回复(0)