close

應該是batch size=1為sgd

一次epoch作loss和,更新一次權重

 

 

如果沒有batch的話,因為需要計算小loss和,需要將所有數據loss算出來,再做相加,如此一來十分費時

因此為了加速訓練,使用隨機梯度下降法(stochastic gradient descent),使方法內容就是,不計算loss和,每一輪iteration中,只以某一個samle的loss作為優化參考

但問題很明顯,某一個sample並不能代表所有sample,如此優化結果可能無法達到全局最佳解

因此為了綜合梯度下降法與隨機梯度下降法,有一折衷方法:

每次計算一部分訓練數據之loss,並加總作為loss和作為優化參考,此一部分數據稱為一個batch

因此 batch size 的意思就是,計算loss和時,數據量大小

另外,即使在多維度輸入之神經網路架構中,同一個batch裡,圖片與label大小還是要統一,但不同batch間不用

想輸入多維度樣本資料有三個方法:

1. batch內定長,不同batch內定不定長

2. 所有batch都定長(透過pad方式),label用blank填充

3. cnn內不定長,在輸入lstm時加pad

 

 

batch size同時參數設定取決於記憶體大小以及訓練速度

同一batch的圖片會一起載入記憶體中,所以也無法無限上綱,且batch太大(32以上),會導致難以收斂(大資料集情況下,我的實測例子是500萬張圖片)

batch太小,要輪完所有訓練集要非常久,訓練入速度會很久,原因如同前面所提

但如果訓練集比較小,建議使用全批次,batch size = 總樣本數

全資料集確定的方向能夠更好的代表樣本總體,從而更準確的朝向極值所在的方向。

 

另外一提,batch設為一,就可以直接輸入不定長圖片,完全不用整理

但我親身實測,完全不收斂(很明顯的)

 

總結:

batchsize:批大小。在深度學習中,一般採用SGD訓練,即每次訓練在訓練集中取batchsize個樣本訓練 ,參數更新是在每次batch結束

iteration:1個iteration等於使用batchsize個樣本訓練一次

epoch:1個epoch等於使用訓練集中的全部樣本訓練一次 

 

參考:

神經網路中Epoch、Iteration、Batchsize相關理解和說明

https://codertw.com/%E7%A8%8B%E5%BC%8F%E8%AA%9E%E8%A8%80/557816/

《Tensorflow實戰google深度學習框架》

arrow
arrow
    全站熱搜

    KR 發表在 痞客邦 留言(0) 人氣()