Aan de slagBegin gratis

Overfitting tegengaan met dropout

Een veelvoorkomend probleem bij neurale netwerken is dat ze geneigd zijn te overfitten op de trainingsdata. Dat betekent dat de scoremaat, zoals R\(^2\) of accuracy, hoog is voor de trainingsset, maar laag voor de test- en validatiesets, en dat het model ruis in de trainingsdata aan het fitten is.

We kunnen overfitting helpen voorkomen met dropout. Hierbij worden tijdens het trainen willekeurig sommige neuronen uitgeschakeld, zodat het netwerk minder snel ruis in de trainingsdata gaat fitten. keras heeft een Dropout-laag die je hiervoor kunt gebruiken. Je moet de dropout-rate instellen: het deel van de verbindingen dat tijdens het trainen wordt uitgeschakeld. Dit geef je als decimaal tussen 0 en 1 mee aan de Dropout()-laag.

Voor dit model gebruiken we weer de mean squared error als verliesfunctie.

Deze oefening maakt deel uit van de cursus

Machine Learning voor finance in Python

Bekijk cursus

Oefeninstructies

  • Voeg een dropoutlaag (Dropout()) toe na de eerste Dense-laag in het model en gebruik 20% (0,2) als dropout-rate.
  • Gebruik de optimizer adam en de verliesfunctie mse bij het compileren van het model in .compile().
  • Train het model op scaled_train_features en train_targets met 25 epochs.

Interactieve oefening met praktijkervaring

Probeer deze oefening door deze voorbeeldcode aan te vullen.

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()
Code bewerken en uitvoeren