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
Instrucțiuni pentru exercițiu
- Adaugă un strat de dropout (
Dropout()) după primul stratDensedin model și folosește o rată de dropout de 20% (0,2). - Folosește optimizatorul
adamși funcția de pierderemsecând compilezi modelul cu.compile(). - Antrenează modelul pe
scaled_train_featuresșitrain_targetsfolosind 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()