天天看點

模型調參:概述【weight_decay、base_lr、lr_policy、clip_norm】【超參數調優方式:網格搜尋(嘗試所有可能組合)、随機搜尋(在所有可能組合中随機選取參數組合)】二、TensorFlow2.0内置的超參數調優工具:HParams

以前剛入門的時候調參隻是從hidden_size,hidden_num,batch_size,lr,embed_size開始調,但是後來才逐漸明白

  • embed_size一般是設定完後不用再調的,比如設定為128後,就不要調了,因為embed_size隻是表示将詞嵌入到幾維的空間而已。
  • lr也一般都有固定值,比如選取優化器Adam的時候,lr=0.001,選取優化器SGD的時候,lr=0.01,
  • hidden_num一般設定為1的時候就行,2層以上在簡單的網絡上隻會到的适得其反的效果。

是以剩下該調的也隻有hidden_size,batch_size,weight_decay,clip_norm,lr_decay了。

train_net:"train.prototxt"
test_net:"test.prototxt"
test_iter: 299  
test_interval: 200
base_lr: 0.01  
display: 20  
max_iter: 6720  
lr_policy: "step"  
gamma: 0.1  
power: 0.75
momentum: 0.9  
weight_decay: 0.0001  
snapshot: 224  
snapshot_prefix: "snapshot"  
solver_mode: GPU  
device_id:0
debug_info:false
snapshot_after_train:true
test_initialization:false
average_loss:10
iter_size:1
stepsize:2000
type: SGD  
eval_type:"detection"
ap_version:"11point"
show_per_class_result:true
           

我們就一個個來解析一下。

  • train_net:訓練的模型檔案的路徑。
  • test_net:測試的模型檔案的路徑。
  • test_iter:網絡的疊代測試次數。網絡一次測試batch_size張圖檔,因為為了可以将驗證集中所有圖檔都測試一次,這個參數乘以batch_size應該等于驗證集中的圖檔數。
  • test_interval:網絡疊代多少次進行一次測試。一次疊代即是将一個batch_size的圖檔進行訓練。這個檔案中test_interval設為了200,也就是說每隔200次對網絡的準确率進行一次驗證。一般來講,我們是需要将訓練集合中的所有圖檔都跑一次再對準确率進行測試,也就是test_interval乘以batch_size不小于訓練集中的圖檔總數。
  • base_lr:表示網絡的基礎學習率,學習率過高可能會無法梯度下降,loss保持不變,也可能loss不能收斂。而學習率過低會使網絡收斂速度緩慢,也可能導緻梯度消失。一般初始學習率設為0.01。
  • display:每隔多少次顯示一次。也就是在螢幕上列印一次loss和準确率。
  • max_iter:網絡的最大疊代次數。訓練集中的圖檔需要訓練多次,是以這個參數一般比較大。
  • lr_policy:學習率變化政策,這裡面又分為如下幾類: - 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))))
  • gamma:因為這裡學習率衰減政策為step,是以需要設定gamma和power兩個參數。
  • power: 同上。
  • momentum:上一次梯度更新的權重,一般取值在0.5–0.99之間。通常設為0.9,momentum可以讓使用SGD的深度學習方法更加穩定以及快速。
  • weight_decay: 權重衰減項,防止過拟合的一個參數。在損失函數中,weight decay是放在正則項(regularization)前面的一個系數,正則項一般訓示模型的複雜度,是以weight decay的作用是調節模型複雜度對損失函數的影響,若weight decay很大,則複雜的模型損失函數的值也就大。
  • sanpshot:每多少次儲存一次學習的結果,在caffe架構下就是caffemodel。
  • snapshot_prefix:模型儲存的路徑。
  • solver_model:設定使用GPU還是CPU進行學習訓練。
  • device_id:GPU序列号,預設從0開始。
  • debug_info:是否顯示debug資訊。
  • snapshot_after_train:是否在訓練結束後儲存一個snapshot檔案。便于以後可以在此基礎上繼續訓練。
  • test_initialization:確定記憶體可以用并輸出loss的初始值。
  • average_loss:顯示loss為之前average_loss個loss的平均值。
  • iter_size:每處理ietr_size*batch_size張圖檔後進行一次梯度計算。
  • stepsize:每多少次學習率遞減。這裡是疊代2000次學習率遞減。
  • type:優化算法的選擇,一共有六種可選:SGD、AdaDelta、AdaGrad、Adam、Nesterov和RMSProp。預設為SGD。原理建議看看斯坦福大學的CS231N視訊課程。
  • eval_type:評價類型。
  • ap_version:計算平均準确率(map值)的方法,有11point、MaxIntegral、Integral三種,l1point是SSD在VOC2007中計算AP的方法,使用了簡單的均值計算。MaxInterral是SSD在VOC2012中使用的最大值積分法。Integral是普通積分方法。

    show_per_class_result:在終端輸出每一類的AP(每一類的檢測精度)資訊。

二、TensorFlow2.0内置的超參數調優工具:HParams

模型調參:概述【weight_decay、base_lr、lr_policy、clip_norm】【超參數調優方式:網格搜尋(嘗試所有可能組合)、随機搜尋(在所有可能組合中随機選取參數組合)】二、TensorFlow2.0内置的超參數調優工具:HParams
模型調參:概述【weight_decay、base_lr、lr_policy、clip_norm】【超參數調優方式:網格搜尋(嘗試所有可能組合)、随機搜尋(在所有可能組合中随機選取參數組合)】二、TensorFlow2.0内置的超參數調優工具:HParams

參考資料:

weight_decay一般設定為多少_卷積神經網絡學習路線(五)| 卷積神經網絡參數設定,提高泛化能力?…

這些神經網絡調參細節,你都了解了嗎

過拟合解決方法之L2正則化和Dropout

詳談P(查準率),R(查全率),F1值

繼續閱讀