2017-03-03 62 views
1

假設我們有500k項目的訓練數據,如果我們一次一個訓練模型或者一次訓練一個項目,或者一次訓練一個項目,這有什麼關係嗎?張量流中的時代問題的訓練數據的大小?

考慮到inputTrainingDataoutputTrainingData[[]]train_step是任何通用張量流訓練步驟。

選項1個火車一次一個項目 -

for i in range(len(inputTrainingData)): 
    train_step.run(feed_dict={x: [inputTrainingData[i]], y: [outputTrainingData[i]], keep_prob: .60}, session= sess) 

選項2列車上一次全部 -

train_step.run(feed_dict={x: inputTrainingData, y: outputTrainingData, keep_prob: .60}, session= sess) 

有作爲選項1和2之間的任何差別以上就培訓質量而言呢?

+0

它通常是由於頻繁的更新權重使用,因爲它使用較少的內存和培訓可以更快,以及。質量明智的應該沒什麼關係,但是非常小的批次可能會導致不太準確的預測。 – umutto

+0

你可以批量的100號培訓。 – CrisH

+0

@umutto謝謝。 「批量很小,準確性較低」 - 因此,1批量可以在培訓中做出重大改變? – Achilles

回答

1

是的,有區別。選項1的內存消耗少得多,但也不太準確。選項2可能會吃掉所有的RAM,但應該證明更準確。但是,如果您一次使用所有訓練集,請務必限制步驟數以避免過度擬合。 理想情況下,批量使用數據(通常在16和256之間)。大多數優化技術是「隨機的」,即它們依靠示例的統計樣本來估計模型更新。 總結: - 更多數據=>更高的準確性(但更多的記憶)=>更高的過度風險(因此限制訓練步驟的數量)

+0

感謝您的詳細解答。我使用1種方法的批處理大小獲得了更好的結果,但我猜可能是因爲數據不好或其他原因。 – Achilles

1

此選項有所不同。通常你必須使用批處理來訓練例如128次迭代的數據。 你也可以使用一個批處理大小,就像你們的第一個例子。 該方法的優點是可以輸出神經網絡的訓練效率。

如果你正在學習所有的數據,你會快一點,但是如果你的效率很高,你只會在最後知道。

最好的方法是做一個批處理和堆棧學習。所以你可以在每個堆棧之後有效地輸出你並控制你的效率。

0

數學上這兩種方法是不同的。一個稱爲隨機梯度下降,另一個稱爲批梯度下降。您錯過了最常用的一個 - 迷你批量梯度下降。關於這個話題已經有很多研究,但基本不同的批量大小有不同的收斂性質。通常人們使用的批量大於1,但不是完整的數據集。這通常是必要的,因爲大多數數據集不能一次裝入內存。此外,如果您的模型使用批量標準化,那麼批量大小不會收斂。這paper討論批量大小(除別的以外)對性能的影響。結論是,較大的批量大小並不一致。 (他們實際上認爲這不是批量大小本身,而是批量更大時更新次數較少的事實,我建議批量大小爲32,以開始實驗,看看批量大小是如何影響性能的,

下面是批量的從我掛紙訓練和驗證性能帶來的效果圖。

enter image description here

相關問題