用 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_features與train_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()