1. 程式人生 > >weight_decay等引數的作用

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")