一、前述
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,否則會出錯。