4

假設我有非常大的訓練集,這樣Matlab在訓練時掛起或者沒有足夠的內存來存放訓練集。如何在Matlab中逐步訓練神經網絡?

是否可以將訓練集分成幾部分並按部分訓練網絡?

是否有可能一次訓練一個樣本的網絡(一個接一個)?

回答

5

您只需手動分割數據集成批次,培養他們一個一個後:

for bn = 1:num_batches 
    inputs = <get batch bn inputs>; 
    targets = <get batch bn targets>; 
    net = train(net, inputs, targets); 
end 

雖然批量大小應大於1,但無論如何應該減少內存單耗進行培訓。

如果是trainlm培訓alogrithm,net.efficiency.memoryReduction優化可以幫助。 而不是默認的trainlm算法,你可以嘗試更少的內存消耗,如trainrp。 有關訓練算法的詳細信息,請檢查matlab documentation page。 我上面假設你正在使用相應的神經網絡工具箱。

關於一次訓練一個樣本,您可以嘗試使用Google隨機梯度下降算法。但是,它看起來不是工具箱中默認的訓練算法集。

+0

在每次迭代中都不會寫上前面的「net」,而是在其上面寫下它? – Alper

+0

@Avatar第一次調用'train'會爲'net'創建初始權重,並從它們開始訓練一批。但隨後的所有呼叫都將從之前批次的訓練網絡獲得的權重開始訓練。所以通常應該期望整體網絡準確度的提高。 – akademi4eg

+0

培訓一批是什麼意思?就像每次培訓的100部分數據?不應該使用adapt()函數嗎? 在我的實驗中,我觀察到,當我迭代地訓練數據時,權重開始呈現數據訓練部分的形狀,並且覆蓋到之前已經訓練過的權重。我無法克服這個問題。你有什麼建議嗎? – Alper