開始使用免費開始

用 dropout 對抗過度擬合

神經網路常見的問題是容易對訓練資料過度擬合。也就是說,像 R\(^2\) 或 accuracy 這類評分指標在訓練集上很高,但在測試集與驗證集上很低,模型其實是在擬合訓練資料中的雜訊。

我們可以透過使用 dropout 來預防過度擬合。訓練階段會隨機丟棄部分神經元,有助於避免網路去擬合訓練資料的雜訊。keras 提供可用的 Dropout 層。我們需要設定 dropout 率,也就是訓練時被丟棄連結的比例。在 Dropout() 層中,這個值以 0 到 1 之間的小數設定。

在這個模型中,我們將回到使用均方誤差(mean squared error)作為損失函式。

本練習屬於課程

Python 金融 Machine Learning

檢視課程

練習說明

  • 在模型的第一個 Dense 層之後加入一個 dropout 層(Dropout()),並將 dropout 率設為 20%(0.2)。
  • .compile() 中使用 adam 作為最佳化器,並使用 mse 作為損失函式。
  • 以 25 個 epochs 將模型訓練在 scaled_train_featurestrain_targets 上。

動手互動練習

試著完成這個範例程式碼,體驗一下這個練習。

from keras.layers import Dropout

# Create model with dropout
model_3 = Sequential()
model_3.add(Dense(100, input_dim=scaled_train_features.shape[1], activation='relu'))
model_3.add(____)
model_3.add(Dense(20, activation='relu'))
model_3.add(Dense(1, activation='linear'))

# Fit model with mean squared error loss function
model_3.compile(optimizer=____, loss=____)
history = model_3.fit(____, ____, epochs=____)
plt.plot(history.history['loss'])
plt.title('loss:' + str(round(history.history['loss'][-1], 6)))
plt.show()
編輯並執行程式碼