劃分資料以實現最優神經網路訓練MATLAB

2021-10-10 20:21:07 字數 1287 閱讀 6611

本主題介紹典型多層網路工作流的一部分。有關詳細資訊和其他步驟,請參閱多層淺層神經網路與反向傳播訓練。多層淺層神經網路與反向傳播訓練

在訓練多層網路時,通常的做法是首先將資料分成三個子集。第乙個子集是訓練集,用於計算梯度和更新網路權重及偏置。第二個子集是驗證集。在訓練過程中會監控基於驗證集的誤差。驗證誤差通常在訓練的初始階段減小,訓練集誤差也是如此。然而,當網路開始過擬合資料時,基於驗證集的誤差通常開始增大。網路權重和偏置以最小的驗證集誤差儲存。這種方法在提高淺層神經網路泛化能力,避免過擬合中進行更詳細的討論。

訓練期間不使用測試集誤差,但測試集誤差用於比較不同模型。在訓練過程中繪製測試集誤差也很有用。如果測試集誤差與驗證集誤差達到最小值所需的迭代次數顯著不同,這可能表示資料集的劃分不佳。

可使用四個函式將資料劃分為訓練集、驗證集和測試集。它們是 dividerand(預設值)、divideblock、divideint 和 divideind。資料劃分通常在您訓練網路時會自動執行。

函式 演算法

dividerand 隨機劃分資料(預設值)

divideblock 將資料劃分為連續資料塊

divideint 使用交錯選擇劃分資料

divideind 按索引劃分資料

您可以使用以下屬性訪問或更改網路的劃分函式:

net.dividefcn

每個劃分函式都採用自定義其行為的引數。這些值會被儲存,且可以通過以下網路屬性進行更改:

net.divideparam

每當對網路進行訓練時,都會自動訪問劃分函式,該函式用於將資料劃分為訓練子集、驗證子集和測試子集。如果 net.dividefcn 設定為 『dividerand』(預設值),則使用劃分引數 net.divideparam.trainratio、net.divideparam.valratio 和 net.divideparam.testratio 將資料隨機分成三個子集。歸入訓練集的資料佔比為 trainratio/(trainratio+valratio+testratio),其他兩個子集的公式類似。訓練、測試和驗證的預設比率分別為 0.7、0.15 和 0.15。

如果 net.dividefcn 設定為 『divideblock』,則使用原始資料集的三個連續資料塊將資料分成三個子集(訓練取第乙個資料塊,驗證取第二個資料塊,測試取第三個資料塊)。歸入每個子集的原始資料佔比同樣由用於 dividerand 的三個劃分引數決定。

如果 net.dividefcn 設定為 『divideint』,則資料將通過交錯方法進行劃分,就像發牌一樣。這樣做是為了讓不同百分比的資料歸入三個子集。歸入每個子集的原始資料佔比同樣由用於 dividerand 的三個劃分引數決定。

訓練最優神經網路

在談論改善模型之前,首先一點是要考慮資料問題。在資料ok的情況下,我們按照吳恩達老師的建議來改善模型。如果誤差過高,我們首先可以考慮把我們現有的神經網路深度加深,以及新增更多的神經元,或許能夠改善學習效果。我們也可以考慮迭代更多的epoch,我們也可以對學習率做出調整,往往更小的學習率能有更好的效果...

用Mnist資料集訓練神經網路

這篇部落格是我在學習用tensorflow搭建神經網路時,所作的一些筆記。搭建的神經網路有兩層隱藏層,和輸入輸出層。採用全連線的方式進行傳輸,優化演算法採用自適用矩估計演算法。1.首先,匯入tensorflow官方提供的庫 import tensorflow as tf from tensorflo...

神經網路擴充套件 增加訓練資料

獲取更多的訓練樣本其實是很好的想法。不幸的是,這個 法代價很 在實踐中常常是很 難達到的。不過,還有 種 法能夠獲得類似的效果,那就是 為擴充套件訓練資料。假設我們使 個5的mnist訓練影象,將其進 旋轉,如說15 這還是會被設別為同樣的數字的。但是在畫素層級這和任何 幅在mnist訓練資料中的圖...