今天在訓練ssd模型的時候,報錯,查詢顯示為gpu視訊記憶體不足,考慮為batch size過大造成的(這裡設定為64),更改為32解決問題。
然後查詢了一些資料,整理關於batch_size的一些內容:
batch size指小批量梯度下降演算法中,設定的一次載入記憶體進行批梯度計算的樣本數量,一般在gpu進行計算時,設定為2的冪數時可以獲得更少的執行時間。
1)、更大的批量會計算更精確的梯度估計,因為每次引數更新用到的資料越多,越能代表整體損失函式的梯度(方向+位移);
2)、極小批量通常難以充分利用多核架構,低於某個值的小批量處理並不會減少計算時間,小批量在一次批量計算的過程中的計算開銷小,但無法充分利用gpu的多核架構,並不會減小時間開銷;
3)、批處理中的所有樣本在gpu視訊記憶體中並行處理,記憶體消耗和批量大小成正比,通常限制batch size大小的是硬體;
4)、gpu通常用2的冪數作為batch獲得更少的執行時間;
5)、小批量學習中加入雜訊,會有一些正則化效果,但小批量通常需要較小的學習率以保持穩定性,因而需要多步遍歷資料,導致執行時間變長。
補充:關於sgd隨機梯度下降演算法的收斂問題,認為限制收斂的一般不是區域性極小值,陷入區域性極小已經是比較好的情況了。大部分出現問題是陷入了山谷型區域和鞍點。
改進的優化演算法:
1)新增momentum動量;
2)adagrad;
3)adam;
4)nesterov accelerated gradient(擴充套件了動量的方法);
5)adadelta(針對adagrad方法改進);
6)rmsprop(針對adagrad方法改進);
7)adamax(adam的乙個變種方法);
8)nadam;
SGD 隨機梯度下降法
中心思想 隨機梯度下降法是每次先將大量的訓練集中隨機打亂順序,再取其中固定數量的例項組成mini batch,按照minibatch進行權重和偏差的更新,重複操作直到所有的資料都按minibatch的規格取完了一遍,這時就完成了乙個epoch,然後在按照提前設定好的epoch數量進行重複計算更新。對...
python實現隨機梯度下降 SGD
使用神經網路進行樣本訓練,要實現隨機梯度下降演算法。這裡我根據麥子學院彭亮老師的講解,總結如下,神經網路的結構在另一篇部落格中已經定義 def sgd self,training data,epochs,mini batch size,eta,test data none if test data ...
梯度下降SGD
當資料過多時,無法將資料一次性載入到記憶體中,進行模型訓練,因此可以使用隨機梯度下降回歸器或分類器,作為線性 器 該方法每次只是用乙個觀察點來進行引數優化,因此 使用ridge或lasso回歸到達可比較的結果之前,採用了更多的迭代,但只需要較少的記憶體和時間。from sklearn.linear ...