始める無料で始める

ドロップアウトによる過学習への対処

ニューラルネットワークでよく見られる問題のひとつが、訓練データへの過学習です。過学習とは、R\(^2\) や正解率などの評価指標が訓練データでは高いにもかかわらず、テストデータや検証データでは低くなる現象で、モデルが訓練データのノイズに過剰に適合してしまっている状態を指します。

この過学習を防ぐ手法のひとつがドロップアウトです。訓練中にランダムにニューロンを無効化することで、モデルがノイズに適合しにくくなります。keras には、この処理を実現する Dropout 層が用意されています。ドロップアウト率(訓練中に切断される接続の割合)を設定する必要があり、Dropout() 層に0から1の間の小数で指定します。

このモデルでは、損失関数として平均二乗誤差(MSE)を使用します。

この演習はコースの一部です

Python による金融のための Machine Learning

コースを見る

演習の手順

  • モデルの最初の Dense 層の後にドロップアウト層(Dropout())を追加し、ドロップアウト率を20%(0.2)に設定しましょう。
  • .compile() でモデルをコンパイルする際、オプティマイザーに adam、損失関数に mse を指定しましょう。
  • 25エポックを使って、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()
コードを編集して実行