weight_decay等引數的作用
這是ssd_pascal.py中的一段程式碼,因為在讀ssd的程式碼,所以貼的這一段,一般別的solver param也差不多......
solver_param = {
# Train parameters
//base_lr:網路的基礎學習速率,一般設一個很小的值,然後根據迭代到不同次數,對學習速率做相應的變化.lr過大不會收斂,過小收斂過慢
'base_lr': base_lr,
//weight_decay:權衰量,用於防止過擬合
'weight_decay': 0.0005,
//lr_policy:學習速率的衰減策略,詳細見後面
'lr_policy': "step",
//stepsize:每40000次迭代減少學習率(這一項和lr_policy有關)
'stepsize': 40000,
//學習率變化的比率(這一項和lr_policy有關)
'gamma': 0.1,
//momentum:網路的衝量;學習的引數,不用變;上一次梯度更新的權重(找到的三個不一樣的說法...)
'momentum': 0.9,
//iter_size:iter_size*batch size=實際使用的batch size。 相當於讀取batchsize*itersize個影象才做一下gradient decent。 這個引數可以規避由於gpu不足而導致的batchsize的限制 因為你可以用多個iteration做到很大的batch 即使單次batch有限
'iter_size': iter_size,
//max_iter:最大迭代次數,告訴網路何時停止訓練.太小達不到收斂,太大會導致震盪
'max_iter': 60000,
//snapshot:每40000次迭代列印一次快照(就是把當前資料儲存下來,方便下次重用,如果電源不穩定容易意外關機建議這個值設小一點...對,就是我...)
'snapshot': 40000,
//display:每經過10次迭代,在螢幕上列印一次執行log(告訴你當前的loss之類的...)
'display': 10,
//取多次foward的loss作平均,進行顯示輸出
'average_loss': 10,
//type:選擇一種優化演算法,具體有哪些見後面
'type': "SGD",
//選擇CPU or GPU
'solver_mode': solver_mode,
//device_id:選擇幾塊GPU
'device_id': device_id,
//用於除錯的?暫時不確定...以後補上
'debug_info': False,
//snapshot_after_train:true表示在訓練完後把最後一次的訓練結果儲存下來
'snapshot_after_train': True,
# Test parameters
//test_iter:每次預測的迭代次數.一般test_iter*batch_size=所有test樣本數,這樣一次預測就可以覆蓋所有test樣本
'test_iter': [test_iter],
//test_interval:訓練時每迭代10000次進行一次預測
'test_interval': 10000,
//
'eval_type': "detection",
//
'ap_version': "11point",
//test_initialization:false表示可以用上次儲存的snapshot來繼續訓練
'test_initialization': False,
}
lr_policy
這個引數代表的是learning rate應該遵守什麼樣的變化規則,這個引數對應的是字串,選項及說明如下:
- “step” - 需要設定一個stepsize引數,返回base_lr * gamma ^ ( floor ( iter / stepsize ) ),iter為當前迭代次數
- “multistep” - 和step相近,但是需要stepvalue引數,step是均勻等間隔變化,而multistep是根據stepvalue的值進行變化
- “fixed” - 保持base_lr不變
- “exp” - 返回base_lr * gamma ^ iter, iter為當前迭代次數
- “poly” - 學習率進行多項式誤差衰減,返回 base_lr ( 1 - iter / max_iter ) ^ ( power )
- “sigmoid” - 學習率進行sigmod函式衰減,返回 base_lr ( 1/ 1+exp ( -gamma * ( iter - stepsize ) ) )
type
到目前的版本,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"
)