應該是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深度學習框架》