Ich habe ein LSTM-Modell erstellt, um doppelte Fragen im offiziellen Quora-Datensatz vorherzusagen. Die Testetiketten sind 0 oder 1. 1 zeigt an, dass das Fragenpaar doppelt vorhanden ist. Nachdem model.fit
ich das Modell mit erstellt habe , teste ich das Modell anhand model.predict
der Testdaten. Die Ausgabe ist ein Array von Werten wie folgt:
[ 0.00514298]
[ 0.15161049]
[ 0.27588326]
[ 0.00236167]
[ 1.80067325]
[ 0.01048524]
[ 1.43425131]
[ 1.99202418]
[ 0.54853892]
[ 0.02514757]
Ich zeige nur die ersten 10 Werte im Array. Ich verstehe nicht, was diese Werte bedeuten und wie lautet die vorhergesagte Bezeichnung für jedes Fragenpaar?
machine-learning
python
neural-network
keras
lstm
Dookoto_Sea
quelle
quelle
Antworten:
Die Ausgabe eines neuronalen Netzwerks ist standardmäßig niemals binär - dh Nullen oder Einsen. Das Netzwerk arbeitet mit kontinuierlichen Werten (nicht diskret), um den Verlust im Rahmen des Gradientenabfalls freier zu optimieren.
Schauen Sie sich hier eine ähnliche Frage an , die auch Code enthält.
Ohne jegliche Optimierung und Skalierung fällt die Ausgabe Ihres Netzwerks in Bezug auf den Nennwert wahrscheinlich irgendwo in den Bereich Ihrer Eingabe. In Ihrem Fall scheint das ungefähr zwischen 0 und 2 zu liegen.
Sie können jetzt eine Funktion schreiben, die Ihre obigen Werte basierend auf einem bestimmten Schwellenwert in 0 oder 1 umwandelt. Skalieren Sie beispielsweise die Werte so, dass sie im Bereich [0, 1] liegen. Wenn der Wert unter 0,5 liegt, geben Sie 0 zurück. Wenn er über 0,5 liegt, geben Sie 1 zurück.
quelle
Wenn dies ein Klassifizierungsproblem ist, sollten Sie Ihr Netzwerk so ändern, dass es 2 Ausgangsneuronen hat.
Mit können Sie Beschriftungen in One-Hot-codierte Vektoren konvertieren
Stellen Sie dann sicher, dass Ihre Ausgabeschicht zwei Neuronen mit einer Softmax-Aktivierungsfunktion hat.
Dies führt
model.predict(x_test_reshaped)
dazu, dass Sie eine Reihe von Listen erstellen. Wobei die innere Liste die Wahrscheinlichkeit ist, dass eine Instanz zu jeder Klasse gehört. Dies ergibt 1 und offensichtlich sollte das entschiedene Label das Ausgangsneuron mit der höchsten Wahrscheinlichkeit sein.Keras hat dies in seiner Bibliothek, so dass Sie diesen Vergleich nicht selbst durchführen müssen. Sie können die Klassenbezeichnung direkt über verwenden
model.predict_classes(x_test_reshaped)
.quelle
Die Vorhersagen basieren auf dem, was Sie als Trainingsergebnisse und die Aktivierungsfunktion eingeben.
Zum Beispiel würden Sie mit einem 0-1-Eingang und einer Sigmoid-Aktivierungsfunktion für den Ausgang mit einem binären Crossentropieverlust die Wahrscheinlichkeit einer 1 erhalten. Abhängig von den Kosten für eine falsche Entscheidung in beide Richtungen können Sie dann entscheiden, wie Sie sich entscheiden sich mit diesen Wahrscheinlichkeiten befassen (z. B. Kategorie "1" vorhersagen, wenn die Wahrscheinlichkeit> 0,5 ist oder vielleicht bereits, wenn sie> 0,1 ist).
Nach Ihrer Beschreibung hatten Sie eine 0-1-Eingabe und nahmen vermutlich eine lineare Aktivierung für Ihre Ausgabeebene an (möglicherweise mit einem mittleren quadratischen Fehlerverlust?). Dies bedeutet, dass Sie ein Regressionsproblem angenommen haben, bei dem die Ausgabe direkt eine vorhergesagte Zahl ist (dies kann eine beliebige reelle Zahl von in ) sein. Ich würde annehmen, dass dies nicht das war, was Sie beabsichtigt haben, und Sie möchten möglicherweise was Ich habe stattdessen im ersten Absatz erwähnt.(−∞,∞
quelle