1. 程式人生 > >Caffe學習筆記10:solver.prototxt各引數設定

Caffe學習筆記10:solver.prototxt各引數設定

caffe solver.prototxt引數意義與設定

  1. batchsize:每迭代一次,網路訓練圖片的數量,例如:如果你的batchsize=256,則你的網路每迭代一次,訓練256張圖片;則,如果你的總圖片張數為1280000張,則要想將你所有的圖片通過網路訓練一次,則需要1280000/256=5000次迭代。

  2. epoch:表示將所有圖片在你的網路中訓練一次所需要的迭代次數,如上面的例子:5000次;我們稱之為 一代。所以如果你想要你的網路訓練100代時,則你的總的迭代次數為max_iteration=5000*100=500000次;

  3. max_iteration:網路的最大迭代次數如上面的500000次;同理,如果max_iteration=450000,則該網路被訓練450000/5000=90代。

  4. test_iter:表示測試的次數;比如,你的test階段的batchsize=100,而你的測試資料為10000張圖片,則你的測試次數為10000/100=100次;即,你的test_iter=100;

  5. test_interval:表示你的網路迭代多少次才進行一次測試,你可以設定為網路訓練完一代,就進行一次測試,比如前面的一代為5000次迭代時,你就可以設定test_interval=5000;

  6. base_lr:表示基礎學習率,在引數梯度下降優化的過程中,學習率會有所調整,而調整的策略就可通過lr_policy這個引數進行設定,若lr_policy設定為step,若stepsize=5000, base_lr=0.01, gamma=0.1,則當迭代到第一個5000次時,lr第一次衰減,衰減後的lr=lrgamma=0.01

    0.1=0.001,以後重複該過程,所以 stepsize是lr的衰減步長,gamma是lr的衰減係數;

  7. stepsize不能太小,如果太小會導致學習率再後來越來越小,達不到充分收斂的效果stepsize不能太小,如果太小會導致學習率再後來越來越小,達不到充分收斂的效果

  8. 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))))
  1. momentum:0.9,動量,不建議調整,表示上一次梯度更新的權重;

  2. weight_decay:表示權重衰減,用於防止過擬合;

  3. 訓練樣本 總共:121368個 batch_szie:256 將所有樣本處理完一次(稱為一代,即epoch)需要:121368/256=475 次迭代才能完成 所以這裡將test_interval設定為475,即處理完一次所有的訓練資料後,才去進行測試。所以這個數要大於等於475. 如果想訓練100代,則最大迭代次數為47500;

  4. 測試樣本 同理,如果有1000個測試樣本,batch_size為25,那麼需要40次才能完整的測試一次。 所以test_iter為40;這個數要大於等於40.

  5. 學習率 學習率變化規律我們設定為隨著迭代次數的增加,慢慢變低。總共迭代47500次,我們將變化5次,所以stepsize設定為47500/5=9500,即每迭代9500次,我們就降低一次學習率。

  6. type 往往loss function 是非凸的,沒有解析解,我們需要通過優化方法來求解 caffe 提供了六種演算法來求解最優引數,在solver配置檔案中,通過設定type型別來選擇 Stochastic Gradient Descent(type:SGD) #隨機梯度下降 AdaDelta(type:AdaDelta) Adaptive Gradient(type: Adaptive) Adam(type:Adam) Nesterov’s Accelerated Gradient(type:Nesterov) RMSprop(type:RMSprop)

  7. display: 100 ,每訓練100次,在螢幕上先是一次,如果設定為0,則不顯示;

  8. snapshot: 1000 ,快照,將訓練出來的model和solver進行儲存,snapshot 用於設定訓練多少次後進行儲存;

  9. snapshot_prefix: “examples/mnist/lenet” :儲存路徑

  10. solver_mode: GPU ,是否使用GPU