Caffe的solver引數介紹
阿新 • • 發佈:2018-11-03
轉自:http://noahsnail.com/2017/02/23/2017-2-23-Caffe%E7%9A%84solver%E5%8F%82%E6%95%B0%E4%BB%8B%E7%BB%8D/
1. Parameters
solver.prototxt
檔案是用來告訴caffe如何訓練網路的。solver.prototxt
的各個引數的解釋如下:
- base_lr
這個引數是用來表示網路的初始學習率的。這個值是一個浮點型實數。 - lr_policy
這個引數是用來表示學習率隨著時間是如何變化的。值是字串,需要加""
。學習率變化的可選引數有:
“step”——需要設定stepsize
。根據gamma
stepsize
引數來降低學習率,base_lr * gamma ^ (floor(iter / stepsize))
。iter
是當前迭代次數。學習率每迭代stepsize
次變化一次。
“multistep”——與step
類似,需要設定stepvalue
,學習率根據stepvalue
進行變化。
“fixed”——學習率base_lr
保持不變。
“inv”——學習率變化公式為base_lr * (1 + gamma * iter) ^ (- power)
“exp”——學習率變化公式為base_lr * gamma ^ iter}
“poly”——學習率以多項式形式衰減,到最大迭代次數時降為0。學習率變化公式為base_lr * (1 - iter/max_iter) ^ (power)
“sigmoid”——學習率以S型曲線形式衰減,學習率變化公式為base_lr * (1 / (1 + exp(-gamma * (iter - stepsize))))
。 - gamma
這個引數表示學習率每次的變化程度,值為實數。 - stepsize
這個引數表示什麼時候應該進行訓練的下一過程,值為正整數。主要用在lr_policy
為step
的情況。 - stepvalue
這個引數表示什麼時候應該進行訓練的下一過程,值為正整數。主要用在lr_policy
為multistep
的情況。 - max_iter
這個引數表示訓練神經網路迭代的最大次數,值為正整數。 - momentum
這個引數表示在新的計算中要保留的前面的權重數量,值為真分數,通常設為0.9。 - weight_decay
這個引數表示對較大權重的懲罰(正則化)因子。值為真分數。
This parameter indicates the factor of (regularization) penalization of large weights. This value is a often a real fraction. - solver_mode
這個引數用來表示求解神經網路的模式——值為CPU or GPU。 - snapshot
這個引數用來表示每迭代多少次就應該儲存snapshot的model
和solverstate
,值為正整數。 - snapshot_prefix:
這個引數用來表示儲存snapshot時model
和solverstate
的字首,值為帶引號的字串。 - net:
這個引數表示訓練網路所在的位置,值為帶引號的字串。 - test_iter
這個引數表示
這個引數表示每個test_interval進行多少次test迭代,值為正整數。 - test_interval
這個引數表示什麼時候進行資料的測試,值為正整數。 - display
這個引數用來表示什麼時候將輸出結果列印到螢幕上,值為正整數,表示迭代次數。 - type
這個引數表示訓練神經網路採用的反向傳播演算法,值為帶引號的字串。可選的值有:
Stochastic Gradient Descent “SGD”——隨機梯度下降,預設值。
AdaDelta “AdaDelta”——一種”魯棒的學習率方法“,是基於梯度的優化方法。
Adaptive Gradient “AdaGrad”——自適應梯度方法。
Adam “Adam”——一種基於梯度的優化方法。
Nesterov’s Accelerated Gradient “Nesterov”——Nesterov的加速梯度法,作為凸優化中最理想的方法,其收斂速度非常快。
RMSprop “RMSProp”——一種基於梯度的優化方法。
2. Demo
lr_policy
# lr_policy為multisetp
base_lr: 0.01
momentum: 0.9
lr_policy: "multistep"
gamma: 0.9
stepvalue: 1000
stepvalue: 2000
stepvalue: 3000
stepvalue: 4000
stepvalue: 5000
# lr_policy為step
base_lr: 0.01
momentum: 0.9
lr_policy: "step"
gamma: 0.9
stepsize: 1000
solver.prototxt
net: "models/bvlc_alexnet/train_val.prototxt"
# 每次測試時進行1000次迭代
test_iter: 1000
# 每進行1000次訓練執行一次測試
test_interval: 1000
base_lr: 0.01
lr_policy: "step"
gamma: 0.1
stepsize: 100000
display: 20
max_iter: 450000
momentum: 0.9
weight_decay: 0.0005
snapshot: 10000
snapshot_prefix: "models/bvlc_alexnet/caffe_alexnet_train"
solver_mode: GPU
參考資料