Caffe Solver裡引數解釋

2021-08-11 02:37:20 字數 3709 閱讀 7520

整理自:《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 ...