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