ÎncepețiÎncepe gratuit

Combaterea supraajustării cu dropout

O problemă frecventă în cazul rețelelor neuronale este tendința de a supraajusta (overfit) datele de antrenament. Concret, metrica de evaluare – de exemplu R\(^2\) sau acuratețea – este ridicată pe setul de antrenament, dar scăzută pe seturile de testare și validare, ceea ce înseamnă că modelul s-a adaptat la zgomotul din datele de antrenament.

Pentru a reduce supraajustarea, putem folosi dropout. Această tehnică dezactivează aleatoriu unii neuroni în timpul antrenamentului, împiedicând rețeaua să se adapteze la zgomotul din date. keras pune la dispoziție un strat Dropout în acest scop. Trebuie să setăm rata de dropout, adică fracțiunea de conexiuni dezactivate în timpul antrenamentului. Aceasta se specifică printr-un număr zecimal între 0 și 1 în stratul Dropout().

Pentru acest model, vom reveni la funcția de pierdere bazată pe eroarea medie pătratică.

Acest exercițiu face parte din cursul

Machine Learning pentru finanțe în Python

Vezi cursul

Instrucțiuni pentru exercițiu

  • Adaugă un strat de dropout (Dropout()) după primul strat Dense din model și folosește o rată de dropout de 20% (0,2).
  • Folosește optimizatorul adam și funcția de pierdere mse când compilezi modelul cu .compile().
  • Antrenează modelul pe scaled_train_features și train_targets folosind 25 de epoci.

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

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()
Editează și rulează codul