Mein Trainingsverlust geht runter und dann wieder rauf. Es ist sehr komisch. Der Kreuzvalidierungsverlust verfolgt den Trainingsverlust. Was ist los?
Ich habe zwei gestapelte LSTMS wie folgt (auf Keras):
model = Sequential()
model.add(LSTM(512, return_sequences=True, input_shape=(len(X[0]), len(nd.char_indices))))
model.add(Dropout(0.2))
model.add(LSTM(512, return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(len(nd.categories)))
model.add(Activation('sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adadelta')
Ich trainiere es für 100 Epochen:
model.fit(X_train, np.array(y_train), batch_size=1024, nb_epoch=100, validation_split=0.2)
Trainieren Sie mit 127803 Stichproben und validieren Sie mit 31951 Stichproben
machine-learning
neural-networks
loss-functions
lstm
patapouf_ai
quelle
quelle
Antworten:
Ihre Lernrate könnte nach der 25. Epoche zu hoch sein. Dieses Problem ist leicht zu erkennen. Sie müssen lediglich einen kleineren Wert für Ihre Lernrate festlegen. Wenn das Problem in Bezug auf Ihre Lernrate als NN einen niedrigeren Fehler erreichen sollte, wird es nach einer Weile wieder steigen. Der wichtigste Punkt ist, dass die Fehlerrate zu einem bestimmten Zeitpunkt niedriger sein wird.
Wenn Sie dieses Verhalten beobachten, können Sie zwei einfache Lösungen verwenden. Der erste ist der einfachste. Stelle einen sehr kleinen Schritt auf und trainiere ihn. Die zweite besteht darin, Ihre Lernrate monoton zu senken. Hier ist eine einfache Formel:
quelle