在本文中,我們將探討Dropout的概念,並了解如何使用TensorFlow和Keras在神經網絡中實現該技術。
了解Dropout
神經網絡在其輸入和輸出層之間具有隱藏層,這些隱藏層中嵌入了神經元,神經元內的權重以及神經元之間的連接使得神經網絡系統能夠模擬學習過程。
一般的觀點是,神經網絡體系結構中的神經元和層越多,其表示能力就越強。表示能力的提高意味著神經網絡可以擬合更複雜的函數,並可以更好地泛化到訓練數據。
複雜神經網絡
越深的神經網絡越容易過度擬合。過度擬合是一個常見問題,它的定義是:模型在訓練數據上表現良好,但經過訓練的機器學習模型無法很好地泛化到不看見的數據。
Dropout的主要目的是使網絡中過度擬合的影響最小化。
Dropout技術是通過隨機減少神經網絡中相互連接的神經元的數量來實現的。在每一個訓練步驟中,每個神經元都有可能被排除在外(從連接的神經元中被剔除)。在某種意義上,層內的神經元學習的權重值不是基於其相鄰神經元的協作。
假設你訓練了7000個不同的神經網絡結構,為了選出最好的一個神經網絡體系結構,你只需要取這7000個訓練過的神經網絡的平均值。
實際上,我們在每個訓練步驟中都在訓練各種不同的網絡(因為在任何兩個訓練步驟中都不可能排除相同的神經元),因此,使用dropout技術訓練的神經網絡是在每個訓練步驟中的所有不同神經元連接組合的平均值。
實際場景
在實際場景中,或者在測試訓練神經網絡的性能時,需要考慮以下兩點:
1、實際上並不是在神經網絡的每個層上都實現了Dropout技術,它通常在神經網絡的最後幾層被使用。
在CIFAR-10機器學習數據集上進行測試時,如果在最後一個隱藏層中使用了Dropout,則錯誤率為15.6%。當相同的數據集在相同的卷積神經網絡上進行測試(任何一層中均未包含dropout技術)時,錯誤率為16.6%,相比之下,這是一個進步。
2、評估訓練過的神經網絡時不會使用Dropout。由於在評估或測試階段未使用Dropout,因此神經網絡可以充分發其潛力,這意味著網絡中的所有神經元都處於活動狀態,每個神經元的輸入連接都比訓練時多。
Python實現
1、導入Python庫
2、加載FashionMNIST機器學習數據集,將圖像進行歸一化並將數據集拆分為測試集、訓練集和驗證集。
3、創建一個包含dropout層的自定義模型。Python代碼如下:
4、加載機器學習模型,並初始化優化器和超參數。
5、對機器學習模型進行總共60個epochs的訓練
model.fit(train_images, train_labels, epochs=60, validation_data=(validation_images, validation_labels))
6、在測試數據集上評估機器學習模型
model.evaluate(test_images, test_labels)
評估結果如下:
最後
Dropout是一種常用的正則化技術,在最先進的計算機視覺任務(如姿態估計、目標檢測或語義分割)中也使用了該技術。