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
LSTM ANN läuft durch, die Voraussagen sind aber alle in (fast) derselben Größe
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.
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.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
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!
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.

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!