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
Ö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
adamoch förlustfunktionenmsenär du kompilerar modellen med.compile(). - Träna modellen på
scaled_train_featuresochtrain_targetsi 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()