Zacznij terazZacznij za darmo

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

Zobacz kurs

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 optymalizatora adam oraz funkcji straty mse.
  • Dopasuj model do scaled_train_features i train_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()
Edytuj i uruchom kod