solver文件设置是通过协调网络的正向推理和反向梯度来协调模型优化,得到试图改善损失的的参数。学习的职责被分配给负责监督优化和生成参数更新的solver,以及负责生成损失和梯度的网络。
caffe有六种优化器
- Stochastic Gradient Descent (
type: "SGD"
) - AdaDelta (
type: "AdaDelta"
) - Adaptive Gradient (
type: "AdaGrad"
) - Adam (
type: "Adam"
) - Nesterov’s Accelerated Gradient (
type: "Nesterov"
) - RMSprop (
type: "RMSProp"
)
net: "models/bvlc_googlenet/train_val.prototxt" #训练网络模型
test_iter: 1000 #测试数据分1000批进行
test_interval: 4000 #每训练4000步测试一次
test_initialization: false #是否是从头训练,false:沿用上一次训练参数模型
base_lr: 0.01 # 基础学习率
lr_policy: "step" # 每迭代stepsize次,下调学习率
gamma: 0.1 #下掉学习率的比例,每次下降10%
stepsize: 100000 # 每迭代100000步,调整学习率
max_iter: 350000 # 总共训练350000步
momentum: 0.9 #剔除10%的参数,对过拟合有一定效果
snapshot: 40000 #迭代40000步保存一次训练参数模型
snapshot_prefix #保存训练参数模型地址
solver_mode: GPU #训练模式:GPU 或 CPU
lr_policy:
lr_policy: 如下7种设置
// - fixed: 学习率不变
// - step: base_lr * gamma ^ (floor(iter / step))
// - exp: base_lr * gamma ^ iter
// - inv: base_lr * (1 + gamma * iter) ^ (- power)
// - multistep: 类似于step,需要设置stepvalue
// 例如stepvalue: 1000 stepvalue: 2000 stepvalue: 3000
// - poly: base_lr (1 - iter/max_iter) ^ (power)
// - sigmoid: base_lr ( 1/(1 + exp(-gamma * (iter - stepsize))))
对于lr_policy不同设置下learning_rate的图形变化可以看这篇博客:
https://blog.csdn.net/cuijyer/article/details/78195178