Mein wiederkehrendes neuronales Netzwerk (LSTM bzw. GRU) verhält sich auf eine Weise, die ich nicht erklären kann. Das Training beginnt und es trainiert gut (die Ergebnisse sehen ziemlich gut aus), wenn die Genauigkeit plötzlich abnimmt (und der Verlust schnell zunimmt) - sowohl Trainings- als auch Testmetriken. Manchmal wird das Netz einfach verrückt und gibt zufällige Ausgaben zurück, und manchmal (wie im letzten von drei Beispielen) beginnt es , allen Ausgaben dieselbe Ausgabe zurückzugeben .
Haben Sie eine Erklärung für dieses Verhalten ? Jede Meinung ist willkommen. Bitte beachten Sie die Aufgabenbeschreibung und die folgenden Abbildungen.
Die Aufgabe: Aus einem Wort seinen word2vec-Vektor vorhersagen
Die Eingabe: Wir haben ein eigenes word2vec-Modell (normalisiert) und versorgen das Netzwerk mit einem Wort (Buchstabe für Buchstabe). Wir füllen die Wörter auf (siehe Beispiel unten).
Beispiel: Wir haben ein Wort Fußball und möchten seinen 100-Dimensionen-Vektor word2vec vorhersagen. Dann ist die Eingabe $football$$$$$$$$$$
.
Drei Beispiele für das Verhalten:
Einschichtiges LSTM
model = Sequential([
LSTM(1024, input_shape=encoder.shape, return_sequences=False),
Dense(w2v_size, activation="linear")
])
model.compile(optimizer='adam', loss="mse", metrics=["accuracy"])
Einschichtige GRU
model = Sequential([
GRU(1024, input_shape=encoder.shape, return_sequences=False),
Dense(w2v_size, activation="linear")
])
model.compile(optimizer='adam', loss="mse", metrics=["accuracy"])
Doppelschicht-LSTM
model = Sequential([
LSTM(512, input_shape=encoder.shape, return_sequences=True),
TimeDistributed(Dense(512, activation="sigmoid")),
LSTM(512, return_sequences=False),
Dense(256, activation="tanh"),
Dense(w2v_size, activation="linear")
])
model.compile(optimizer='adam', loss="mse", metrics=["accuracy"])
Wir haben diese Art von Verhalten auch in einem anderen Projekt erlebt, in dem zuvor eine ähnliche Architektur verwendet wurde, deren Ziel und Daten jedoch unterschiedlich waren. Der Grund sollte also nicht in den Daten oder im jeweiligen Ziel verborgen sein, sondern in der Architektur.
nan
.
nan
Parameter würde nicht zu einem Nicht-Nan-Verlust führen. Ich vermute, dass Ihre Farbverläufe explodieren. Ähnliches ist mir in nicht stapelnormalisierten Netzwerken passiert.
nan
sie in einer der Berechnungen auftauchte und dann standardmäßig einen anderen Wert verwendete, der das Netzwerk verrückt machte. Aber es ist nur eine wilde Vermutung. Danke für deine Meinung.