Boj s přetrénováním pomocí dropoutu
Častým problémem neuronových sítí je přetrénování (overfitting) na trénovacích datech. To znamená, že metrika jako R\(^2\) nebo přesnost vychází dobře pro trénovací sadu, ale špatně pro testovací a validační sadu – model se totiž přizpůsobil šumu v trénovacích datech.
Přetrénování lze omezit pomocí dropoutu. Ten během trénování náhodně vypíná část neuronů, čímž brání síti v přizpůsobování se šumu. keras nabízí vrstvu Dropout, která to za nás zajistí. Nastavíme dropout rate, tedy podíl spojení, která se během trénování náhodně vypínají. Zadává se jako desetinné číslo mezi 0 a 1 přímo do vrstvy Dropout().
Pro tento model se vrátíme ke ztrátové funkci mean squared error.
Toto cvičení je součástí kurzu
Machine Learning for Finance in Python
Pokyny k cvičení
- Za první vrstvu Dense přidej do modelu vrstvu dropout (
Dropout()) a nastav dropout rate na 20 % (0,2). - Při kompilaci modelu v
.compile()použij optimalizátoradama ztrátovou funkcimse. - Natrénuj model na
scaled_train_featuresatrain_targetspo dobu 25 epoch.
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
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()