Walka z przeuczeniem przy użyciu dropout
Jednym z częstych problemów sieci neuronowych jest ich tendencja do przeuczenia (overfitting) na danych treningowych. Oznacza to, że metryka oceny – na przykład R\(^2\) lub dokładność – jest wysoka dla zbioru treningowego, ale niska dla zbiorów testowego i walidacyjnego. Model dopasowuje się wtedy do szumu w danych treningowych zamiast do rzeczywistych zależności.
Aby ograniczyć ryzyko przeuczenia, można zastosować dropout. Technika ta losowo wyłącza część neuronów podczas trenowania, co utrudnia sieci zapamiętywanie szumu w danych. Biblioteka keras udostępnia warstwę Dropout, która to umożliwia. Wystarczy ustawić współczynnik dropout, czyli ułamek połączeń wyłączanych podczas trenowania – podaje się go jako wartość dziesiętną z przedziału od 0 do 1 w warstwie Dropout().
W tym modelu wrócimy do funkcji straty opartej na błędzie średniokwadratowym.
To ćwiczenie jest częścią kursu
Uczenie maszynowe w finansach z Pythonem
Instrukcje do ćwiczenia
- Po pierwszej warstwie Dense dodaj warstwę dropout (
Dropout()) i ustaw współczynnik dropout na 20% (0.2). - Podczas kompilowania modelu w
.compile()użyj optymalizatoraadamoraz funkcji stratymse. - Dopasuj model do
scaled_train_featuresitrain_targets, stosując 25 epok.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
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()