整理自:《caffe學習系列(7):solver及其配置》
同時參考《caffe中的優化方法》、《caffe中learning rate 和 weight decay 的理解》 和 《深度學習最全優化方法總結比較(sgd,adagrad,adadelta,adam,adamax,nadam)》
net: "models/bvlc_alexnet/train_val.prototxt"
test_iter: 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
訓練-測試網路的位置,也可以分別設定:
train_net: "***_train.prototxt"
test_net: "***_test.prototxt"
test_iter 需要與 test layer 裡的 batch_size 結合
假設 test 總樣本數為 10000,取 batch_size=200,那麼總共需要 test_iter=50 次才能測試完全
test_interval=1000 表示每 1000次訓練才測試一次
caffe 實現了6種優化演算法,在 solver 中可以通過 type: 來選擇。預設為 「sgd」
以sgd為例(後面有幾種優化演算法的分析) {w
t+1=
wt+v
t+1v
t+1=
μvt−
α∇l(
wt)(
1)base_lr:基礎學習率,上式中的 α
momentum:動量,上式中的
μ ,保留上一次修正的量,一般設為0.9
lr_policy:lr 更新的策略,有以下幾種
weight_decay:權重衰減項,為了防止發生過擬合
摘自《深度學習最全優化方法總結比較(sgd,adagrad,adadelta,adam,adamax,nadam)》
sgd一般都是指的 mini-batch gradient descent,每一次迭代計算 mini-batch 的梯度,然後對引數進行更新(式1),是最常見的優化方法
缺點:
nesterov
在梯度更新時做乙個校正,避免前進太快,同時提高靈敏度 ⎧⎩
⎨vt+
1=−α
mt+1
mt+1
=μmt
+gt+
1gt+
1=∇l
(wt−
αμmt
)(2)
adagrad
自適應學習率,對 lr 進行了乙個約束 ⎧⎩
⎨⎪⎪v
t+1=
−αnt
+1+ε
√gt+
1nt+
1=nt
+g2t
+1gt
+1=∇
l(wt
) 優點:
缺點:
adadelta
adadelta 是 adagrad 的擴充套件,思路依然是對學習率進行自適應約束,但是進行了計算上的簡化 ⎧⎩
⎨⎪⎪⎪
⎪vt+
1=−∑
tr=1
vt√e
|g2|
t+1+
ε√e|
g2|t
+1=ρ
e|g2
|t+(
1−ρ)
g2t+
1 其中 e()
是求期望
特點:
rmsprop
可以算 adadelta 的乙個特例:取 ρ=
0.5 ,這樣 e|
g2|t
+1−−
−−−−
−√就變成rms(均方根) ⎧⎩
⎨vt+
1=−α
rms|
g|t+
1gt+
1rms
|g|t
+1=e
|g2|
t+1+
ε−−−
−−−−
−−√
特點:
adam
本質上是帶有動量項的 rmsprop,利用梯度的一階矩估計和二階矩估計動態調整每個引數的學習率 ⎧⎩
⎨⎪⎪⎪
⎪⎪⎪⎪
⎪⎪⎪⎪
⎪⎪⎪⎪
⎪⎪⎪v
t+1=
−m′t
+1n′
t+1√
+εαm
′t+1
=mt+
11−μ
t+1n
′t+1
=nt+
11−ν
t+1m
t+1=
μmt+
(1−μ
)gt+
1nt+
1=νn
t+(1
−ν)g
2t+1
其中 mt
+1和 nt
+1分別是對梯度的一階矩估計和二階矩估計; m′
t+1 和 n′
t+1 是對 mt
+1和 nt
+1的校正
特點:
adamax
是 adam 的一種變體,給學習率的上限提供了乙個更簡單的範圍 ⎧⎩
⎨vt+
1=−m
′t+1
nt+1
+εαn
t+1=
max(
νnt,
|gt+
1|)
nadam
類似於帶有 nesterov 動量項的 adam ⎧⎩
⎨⎪⎪⎪
⎪⎪⎪⎪
⎪⎪⎪⎪
⎪⎪⎪⎪
⎪⎪⎪⎪
⎪⎪⎪⎪
⎪⎪⎪v
t+1=
−αm′
t+1n
′t+1
√+εm
′t+1
=mt+
11−∏
t+1i
=1μi
n′t+
1=(1
−μt+
1)g′
t+1+
μt+1
m′t+
1mt+
1=μt
+1mt
+(1−
μt+1
)gt+
1nt+
1=νn
t+(1
−ν)g
2t+1
g′t+
1=gt
+11−
∏t+1
i=1μ
i 總結
一般而言,在可以使用 rmsprop 和 adam 的地方,用 nadam 可以取得更好的效果
caffe solver引數設定
solver檔案設定是通過協調網路的正向推理和反向梯度來協調模型優化,得到試圖改善損失的的引數。學習的職責被分配給負責監督優化和生成引數更新的solver,以及負責生成損失和梯度的網路。caffe有六種優化器 net models bvlc googlenet train val.prototxt ...
caffe solver引數意義與設定
batchsize 每迭代一次,網路訓練的數量,例如 如果你的batchsize 256,則你的網路每迭代一次,訓練256張 則,如果你的總張數為1280000張,則要想將你所有的通過網路訓練一次,則需要1280000 256 5000次迭代。epoch 表示將所有在你的網路中訓練一次所需要的迭代次...
Django cms show menu引數解釋
當頁面結構設定 admin cms page 如下 home level 0 about us level 1 about company services level 2 foo bar level 3 our management team level 2 some other section ...