Overfitting mit Dropout bekämpfen
Ein häufiges Problem bei neuronalen Netzen ist, dass sie zum Overfitting auf die Trainingsdaten neigen. Das bedeutet, dass die Bewertungskennzahl, wie R\(^2\) oder Accuracy, für den Trainingssatz hoch ist, aber für Test- und Validierungssätze niedrig, und das Modell an Rauschen in den Trainingsdaten angepasst wird.
Dem können wir mit Dropout entgegenwirken. Dabei werden während der Trainingsphase zufällig einige Neuronen deaktiviert, was verhindert, dass das Netz das Rauschen in den Trainingsdaten lernt. keras hat dafür eine Dropout-Schicht. Wir müssen die Dropout-Rate festlegen, also den Anteil der Verbindungen, die während des Trainings deaktiviert werden. Diese wird als Dezimalzahl zwischen 0 und 1 in der Dropout()-Schicht gesetzt.
Für dieses Modell verwenden wir wieder die Verlustfunktion Mean Squared Error.
Diese Übung ist Teil des Kurses
<Kurs>Maschinelles Lernen für Finanzen in Python</Kurs>Übungsanweisungen
- Füge nach der ersten Dense-Schicht im Modell eine Dropout-Schicht (
Dropout()) hinzu und verwende 20 % (0,2) als Dropout-Rate. - Verwende den Optimizer
adamund die Verlustfunktionmse, wenn du das Modell mit.compile()kompilierst. - Trainiere das Modell mit den
scaled_train_featuresundtrain_targetsüber 25 Epochen.
Interaktive praktische Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
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()