Kom igångKom igång gratis

Motverka överanpassning med dropout

Ett vanligt problem med neurala nätverk är att de tenderar att överanpassa sig till träningsdata. Det innebär att ett mått som R\(^2\) eller noggrannhet är högt för träningsuppsättningen men lågt för test- och valideringsuppsättningarna – modellen anpassar sig alltså till brus i träningsdata.

Ett sätt att motverka överanpassning är att använda dropout. Det innebär att slumpmässiga neuroner inaktiveras under träningsfasen, vilket hjälper nätverket att undvika att anpassa sig till brus. keras har ett Dropout-lager som kan användas för detta. Du anger dropout-andelen, det vill säga andelen kopplingar som inaktiveras under träningen, som ett decimaltal mellan 0 och 1 i Dropout()-lagret.

I den här modellen återgår vi till förlustfunktionen för medelkvadratfel.

Den här övningen är en del av kursen

Maskininlärning för finans i Python

Visa kurs

Övningsinstruktioner

  • Lägg till ett dropout-lager (Dropout()) efter det första Dense-lagret i modellen och använd 20 % (0,2) som dropout-andel.
  • Använd optimeraren adam och förlustfunktionen mse när du kompilerar modellen med .compile().
  • Träna modellen på scaled_train_features och train_targets i 25 epoker.

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

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()
Redigera och kör kod