如何在TensorFlow中使用dropout來減少過擬合?
TensorFlow可以使用dropout技術來減少過擬合,該技術建立一個包含重縮放層和增強資料的順序模型。
閱讀更多: 什麼是TensorFlow以及Keras如何與TensorFlow一起建立神經網路?
我們將使用Keras Sequential API,它有助於構建順序模型,用於處理簡單的層堆疊,其中每一層只有一個輸入張量和一個輸出張量。
包含至少一層卷積層的神經網路被稱為卷積神經網路。我們可以使用卷積神經網路來構建學習模型。
使用keras.Sequential模型建立一個影像分類器,並使用preprocessing.image_dataset_from_directory載入資料。資料可以有效地從磁碟載入。識別過擬合併應用技術來緩解它。這些技術包括資料增強和dropout。共有3700張花卉圖片。該資料集包含5個子目錄,每個子目錄對應一個類別。
分別是雛菊、蒲公英、玫瑰、向日葵和鬱金香。
我們使用Google Colaboratory執行以下程式碼。Google Colab或Colaboratory幫助在瀏覽器上執行Python程式碼,無需任何配置,並可免費訪問GPU(圖形處理單元)。Colaboratory構建在Jupyter Notebook之上。
當訓練樣本數量較少時,模型會從訓練樣本中的噪聲或不需要的細節中學習。這會對模型在新樣本上的效能產生負面影響。
由於過擬合,模型將無法在新資料集上很好地泛化。有許多方法可以避免過擬合。我們可以使用dropout技術來克服過擬合。透過在網路中引入dropout可以減少過擬合。這被認為是一種正則化形式。這有助於模型接觸到更多的資料方面,從而幫助模型更好地泛化。
當將dropout應用於一層時,在訓練過程中會隨機丟棄該層中的多個輸出單元。這是透過將啟用函式設定為0來實現的。dropout技術採用分數作為輸入值(例如0.1、0.2、0.4等)。這個數字0.1或0.2基本上表示從應用層隨機丟棄10%或20%的輸出單元。
資料增強透過使用隨機變換來增強現有示例,從而從現有示例生成額外的訓練資料,這些變換將產生看起來可信的影像。以下是一個示例
示例
print("The dropout technique to reduce overfitting")
model = Sequential([
data_augmentation,
layers.experimental.preprocessing.Rescaling(1./255),
layers.Conv2D(16, 3, padding='same', activation='relu'),
layers.MaxPooling2D(),
layers.Conv2D(32, 3, padding='same', activation='relu'),
layers.MaxPooling2D(),
layers.Conv2D(64, 3, padding='same', activation='relu'),
layers.MaxPooling2D(),
layers.Dropout(0.2),
layers.Flatten(),
layers.Dense(128, activation='relu'),
layers.Dense(num_classes)
])程式碼來源 −https://www.tensorflow.org/tutorials/images/classification
輸出
The dropout technique to reduce overfitting
解釋
- 使用layers.Dropout建立神經網路。
- 建立具有三層的順序模型。
- 下一步是使用增強影像訓練此資料集。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP