Contrastare l'overfitting con il dropout
Un problema comune delle reti neurali è la tendenza a fare overfitting sui dati di training. Questo significa che la metrica di valutazione, come R\(^2\) o l'accuracy, è alta sul set di training ma bassa sui set di test e validazione, e il modello finisce per adattarsi al rumore nei dati di training.
Possiamo prevenire l'overfitting usando il dropout. Questo disattiva casualmente alcuni neuroni durante la fase di training, aiutando a evitare che la rete si adatti al rumore nei dati. keras offre un livello Dropout per farlo. Dobbiamo impostare il tasso di dropout, ovvero la frazione di connessioni disattivate durante il training. Questo valore va impostato come decimale tra 0 e 1 nel livello Dropout().
Per questo modello torneremo a usare la funzione di loss mean squared error.
Questo esercizio fa parte del corso
Machine Learning per la finanza in Python
Istruzioni dell'esercizio
- Aggiungi un livello di dropout (
Dropout()) dopo il primo livello Dense del modello e usa il 20% (0,2) come tasso di dropout. - Usa l'ottimizzatore
adame la funzione di lossmsequando compili il modello con.compile(). - Allena il modello su
scaled_train_featuresetrain_targetsper 25 epoche.
esercizio interattivo pratico
Prova questo esercizio completando questo codice di esempio.
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()