Seite 1 von 1

LSTM ANN läuft durch, die Voraussagen sind aber alle in (fast) derselben Größe

Verfasst: Mittwoch 11. September 2024, 18:50
von d_s_2024
Hallo an alle,

ich habe ein LSTM Model erstellt und lasse damit Daten analysieren. Es handelt sich um eine Datei mit einem DateTime Element als Index, 72 Datenspalten und einer Spalte Labels, die (normalisiert mit MinMaxScaler) die diskreten Werte 0, 0.25, 0.5, 0.75 und 1 annehmen können.
Das Model läuft inzwischen klaglos durch, die Vorhersagen für die Labels der Testdaten liegt jedoch immer um 0.495 (+/-0.001). Nun erwarte ich nicht, dass die Vorhersage perfekt ist, aber das Ergebnis verwundert mich dann doch. Was könnte die Ursache sein?

Hier der Code:

model = Sequential()
model.add(LSTM(64,input_shape=(10, 72), return_sequences=True)) # Input-Layer
model.add(LSTM(64, return_sequences=True)) # Hidden Layer 1
model.add(Dropout(0.05))
model.add(LSTM(64, return_sequences=True)) # Hidden Layer 2
model.add(Dropout(0.05))
model.add(LSTM(64)) # Hidden Layer 3
model.add(Dense(1, activation='sigmoid')) # Output-Layer


# Kompilieren des Modells
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=[tf.keras.metrics.Precision(),
tf.keras.metrics.Recall()])


# Trainieren des Modells
#model.fit(features, label, epochs=100, batch_size=32, validation_split=0.2)
model.fit(X_train, y_train,validation_data = (X_test,y_test), epochs=10, batch_size=32, validation_split=0.2)


# Vorhersagen auf dem Validierungsdatensatz erhalten

validation_predictions = model.predict(X_test)


# Erstellen eines Pandas DataFrame mit den Validierungsergebnissen

validation_results = pd.DataFrame({'actual_label': y_test.flatten(), 'predicted_label': validation_predictions.flatten()})

print(validation_results)

actual_label predicted_label
0 0.00 0.494990
1 0.25 0.495035
2 0.50 0.495570
3 0.00 0.495152
4 0.75 0.495622
.. ... ...
369 1.00 0.495035
370 0.00 0.495625
371 1.00 0.495055
372 0.00 0.494984
373 0.25 0.495717

Re: LSTM ANN läuft durch, die Voraussagen sind aber alle in (fast) derselben Größe

Verfasst: Donnerstag 12. September 2024, 14:03
von ThomasL
Hi,

binary_crossentropy passt da nicht. Schau mal hier: https://www.tensorflow.org/api_docs/pyt ... ossentropy
Da müssen die Labels entweder 0 oder 1 sein, das Wort binary ist dir ein Begriff?

Hier alle Loss Funktionen von Tensorflow https://www.tensorflow.org/api_docs/pyt ... ras/losses
Probier mal MeanSquaredError.

Aber du hast ja Klassen als Labels, bei dir die Werte 0, 0.25, 0.5, 0.75, 1.0.
Also wären die CategoricalCrossentropy Loss Funktionen das was du nehmen solltest.
Dazu musst du die Labels aber aber entweder in One-Hot Vektoren umwandeln für CategoricalCrossentropy
oder in Integerwerte für SparseCategoricalCrossentropy .

Viel Erfolg.

Re: LSTM ANN läuft durch, die Voraussagen sind aber alle in (fast) derselben Größe

Verfasst: Freitag 13. September 2024, 16:27
von d_s_2024
Hi,

vielen Dank für die schnelle Antwort und die Hinweise.

>> binary_crossentropy passt da nicht. Schau mal hier: https://www.tensorflow.org/api_docs/pyt ... ossentropy
Da müssen die Labels entweder 0 oder 1 sein, das Wort binary ist dir ein Begriff?

Ähm, ja, da war irgendetwas. :-) Sorry, dass ich die Loss Funktion hier mit reinkopiert habe. Es war eher eine sinnlose Verzweiflungstat, da ich andere z.B.
MeanSquaredError schon probiert hatte. Das Ergebnis war mehr oder weniger dasselbe. Ich wollte einfach wissen, ob ich irgendeine Änderung in irgendeiner Form provozieren kann.
Könnte es noch eine andere Ursache als die Loss-Funktion geben?

>> Aber du hast ja Klassen als Labels, bei dir die Werte 0, 0.25, 0.5, 0.75, 1.0.
Also wären die CategoricalCrossentropy Loss Funktionen das was du nehmen solltest.
Dazu musst du die Labels aber aber entweder in One-Hot Vektoren umwandeln für CategoricalCrossentropy
oder in Integerwerte für SparseCategoricalCrossentropy .

Das schaue ich mir am Wochenende mal an.

Vielen Dank für die Anregungen!