caffe ssd訓練腳本參數詳解

ssd_pascal.py

# Divide the mini-batch to different GPUs.
batch_size = 32
accum_batch_size = 32
iter_size = accum_batch_size / batch_size
solver_mode = P.Solver.CPU
device_id = 0
batch_size_per_device = batch_size
if num_gpus > 0:
  batch_size_per_device = int(math.ceil(float(batch_size) / num_gpus))
  iter_size = int(math.ceil(float(accum_batch_size) / (batch_size_per_device * num_gpus)))
  solver_mode = P.Solver.GPU
  device_id = int(gpulist[0])

說明

  • batch_size:訓練時每次進入網絡的圖片數
  • iter_size:訓練時對進入網絡的圖片需要迭代的次數
  • accum_batch_size:batch_size和iter_size的乘積
  • test_batch_size : 測試時每次進入網絡的圖片數
  • test_iter_size : 測試時對進入網絡的圖片需要迭代的次數
  • test_interval : 訓練迭代多少次後會進行一次測試

在運算資源有限的情況下,可以通過改變batch_size和iter_size降低計算資源。要注意的一點是在使用多張顯卡跑網絡的時候,每張顯卡都是並行運行的,還是一個batch_size的圖片輸入,所以並不會使緩存降下來,但它在理論上是可以將運行的時間成顯卡數量的倍數縮短。

例如

在ssd_pascal.py中,每次進入網絡的圖片爲32張,訓練時需要對這32張圖片迭代1次。然而我們在實際的操作中用一張NV TITAN會”out of memory”,所以我們將batch_size改爲4,iter_size改成4,相當於每次進入網絡4張圖片,訓練時需要對這4張圖片迭代4次,然後對迭代的結果取平均值,理論上來說就相當於batch_size爲16,所以在原來的配置中跑完這個網絡總共需要迭代120000次,而爲了達到這個效果我們需要增加到240000次。雖說這樣理論上可以達到同樣的效果,但是實際中還是會有細小的差別。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章