Caffe solver.prototxt學習

這裏介紹caffe 的配置文件solver.protxt裏面各個參數的含義。
正如官網上給出的解釋,在solver解決下面的四個問題:
a.訓練的記錄(bookkeeping),創建用於training以及test的網絡結構;
b.使用前向以及反向過程對training網絡參數學習的過程;
c.對testing網絡進行評價;
d.優化過程中模型中間結果的快照及求解的狀態;
下面從這個四個方面介紹solver.prototxt文件中常見參數的含義:
1.net,type;base_lr,lr_polilcy
net: 用於聲明training 以及test的網絡結構定義在哪個文件中,所以它是一個文件名,一般用caffe的相對路徑。這個還可以分開用train_net以及test_net,相當於在兩個文件中分別給出了訓練以及測試網絡的結構定義。
type:solver的類型。深度網絡的目標函數一般是非凸的,一般用基於梯度下降的方法來解。caffe中支持的基於梯度的方法包括: SGD(default),AdaDelt,AdaGrad,Adam,NAG.每個方法需要設定不同的參數,這裏首先分析SGD的參數:
base_lr:學習率(learning rate),也就是梯度算法中的步長,這個是最初的步長。
lr_policy: 按照某種方式對梯度算法中的步長進行更新;包含下面的方式:fixed,step,exp,inv,multistep,poly,sigmoid對這些的詳細描述可以參考這個很讚的blog. 這裏描述常用的基於迭代次數的方式:step。她根據iter對步長進行更新,這種方式還對應一個stepsize參數,它的值是一個整數,表示stepsize次迭代對步長進行一次更新;公式爲base_lr*gamma^(iter/stepsize)
gamma:這個參數就是在上面的公式中更新學習率的公式中用到的參數,要注意的是不同的方式有不同參數,有些方法中可能不存在這個參數。
momentum(mu):它表示的是本次更新權重用的梯度對上一次梯度的保留的比例。
2.max_iter,display,weight_decay
max_iter:這個表示網絡前向以及後向學習算法的次數。
display: 參數是一個整數,表明多少次對結果進行一此展示。如果設爲0就不會打印。
weight_decay:權重正則項的參數,它是爲了防止模型的過擬。通常而言,一般樣本越多,值越小;模型越大(更深,濾波器尺寸越大等),值越大。
3.test_iter, test_interval:
test_iter:測試網絡中測試的時候所用的batch數,一般保證test_iter*batch>測試樣本數;
test_interval:每隔多少個iter對測試網絡進行一個評價。
4.snapshot,snapshot_prefix.
snapshot:多少個iter保存一次網絡的快照,這個有利於resume;
snapshot_prefix:快照存儲的位置以及名稱。
還可以設置snapshot_diff,snapshot_format.是否保存梯度值以及保存的類型。

Reference
[1]http://www.cnblogs.com/denny402/p/5074049.html
[2]http://stackoverflow.com/questions/32177764/what-is-weight-decay-meta-parameter-in-caffe?noredirect=1&lq=1
[3]http://caffe.berkeleyvision.org/tutorial/solver.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章