PointRCNN作者代碼中學習率的變化情況

作者用的是adam onecycle,使用了下面的配置。由於我不想只訓練200個epoch rpn階段,想多訓練一些週期,於是自己調整了訓練週期,但是這樣做訓練一段時間之後,學習率還是在上升的,這樣肯定是不行的,因爲一般訓練結束的時候學習率是很小的。

分析學習率變化有兩種方法,一種是理論分析,一種看代碼分析,一種是試驗分析。我採用最後者。但是如果真訓練的話又會用太長時間。於是我就把訓練的樣本從幾千個變成了1,這樣1S左右一個epoch。

接下來我更改總的學習週期,更改DECAY_STEP_LIST等,看看學習率變化曲線是怎樣的。

LR: 0.002
LR_CLIP: 0.00001
LR_DECAY: 0.5
DECAY_STEP_LIST: [100, 150, 180, 200]
LR_WARMUP: True
WARMUP_MIN: 0.0002
WARMUP_EPOCH: 1

下面是DECAY_STEP_LIST: [100, 150, 180, 200],epoches=200

 

下面是DECAY_STEP_LIST: [100, 150, 180, 200],epoches=200

可以看到好像和設置的 : [100, 150, 180, 200]沒有關係,和設置的總訓練週期有關係,先上升後下降。

現在改改[100, 150, 180, 200]中的數字個數試試。並沒有什麼卵用,不太清楚這裏的作用。

猜想是訓練方法的原因,如果不是adam_onecycle,可能這個列表就有用了。下面試試:

果然。。

DECAY_STEP_LIST: [10, 15, 18, 40] & epoches=100

LR_CLIP: 0.00001
LR_DECAY: 0.5
DECAY_STEP_LIST: [10, 15, 18, 20,25,27,28,29,30]
LR_WARMUP: True
WARMUP_MIN: 0.0002
WARMUP_EPOCH: 1

設置文件裏面的這些參數應該都是爲adam用的。

(一)、什麼是Warmup?
Warmup是在ResNet論文中提到的一種學習率預熱的方法,它在訓練開始的時候先選擇使用一個較小的學習率,訓練了一些epoches或者steps(比如4個epoches,10000steps),再修改爲預先設置的學習來進行訓練。引用自學習率預熱

 

LR: 0.002 代表最大的學習率。adam和adam_onecycle共用這個參數。

 

 

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