【Caffe篇】--Caffe solver層從初始到應用

LHBlog發表於2018-06-30

一、前述

solve主要是定義求解過程,超引數的

二、具體

#往往loss function是非凸的,沒有解析解,我們需要通過優化方法來求解。
#caffe提供了六種優化演算法來求解最優引數,在solver配置檔案中,通過設定type型別來選擇。

    Stochastic Gradient Descent (type: "SGD"),
    AdaDelta (type: "AdaDelta"),
    Adaptive Gradient (type: "AdaGrad"),
    Adam (type: "Adam"),
    Nesterov’s Accelerated Gradient (type: "Nesterov") and
    RMSprop (type: "RMSProp")


net: "examples/mnist/lenet_train_test.prototxt"  #網路配置檔案位置
test_iter: 100
test_interval: 500
base_lr: 0.01#基礎學習率
momentum: 0.9
type: SGD
weight_decay: 0.0005
lr_policy: "inv"
gamma: 0.0001
power: 0.75
display: 100
max_iter: 20000
snapshot: 5000
snapshot_prefix: "examples/mnist/lenet"
solver_mode: CPU

net: "examples/mnist/lenet_train_test.prototxt" #網路位置
train_net: "examples/hdf5_classification/logreg_auto_train.prototxt" #也可以分別設定train和test
test_net: "examples/hdf5_classification/logreg_auto_test.prototxt"

test_iter: 100 #迭代了多少個測試樣本呢? batch*test_iter 假設有5000個測試樣本,一次測試想跑遍這5000個則需要設定test_iter×batch=5000

test_interval: 500 #測試間隔。也就是每訓練500次,才進行一次測試。


base_lr: 0.01 #base_lr用於設定基礎學習率

lr_policy: "inv" #學習率調整的策略 希望學習率越來越小

        - fixed:   保持base_lr不變.
        - step:    如果設定為step,則還需要設定一個stepsize,  返回 base_lr * gamma ^ (floor(iter / stepsize)),其中iter表示當前的迭代次數
        - exp:     返回base_lr * gamma ^ iter, iter為當前迭代次數
        - inv:      如果設定為inv,還需要設定一個power, 返回base_lr * (1 + gamma * iter) ^ (- power)
        - multistep: 如果設定為multistep,則還需要設定一個stepvalue。這個引數和step很相似,step是均勻等間隔變化,而multistep則是根據                                             stepvalue值變化
        - poly:     學習率進行多項式誤差, 返回 base_lr (1 - iter/max_iter) ^ (power)
        - sigmoid: 學習率進行sigmod衰減,返回 base_lr ( 1/(1 + exp(-gamma * (iter - stepsize))))

momentum :0.9 #動量 一般是固定為0.9

display: 100 #每訓練100次,在螢幕上顯示一次。如果設定為0,則不顯示。

max_iter: 20000 #最大迭代次數,2W次就停止了

snapshot: 5000 #快照。將訓練出來的model和solver狀態進行儲存,snapshot用於設定訓練多少次後進行儲存
snapshot_prefix: "examples/mnist/lenet" 

solver_mode: CPU #設定執行模式。預設為GPU,如果你沒有GPU,則需要改成CPU,否則會出錯。

 

相關文章