Was bedeutet die Ausgabe der Funktion model.predict von Keras?

13

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.fitich das Modell mit erstellt habe , teste ich das Modell anhand model.predictder 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?

Dookoto_Sea
quelle
1
Ich denke, Sie haben ein Problem in Ihrem Netzwerk .. die Wahrscheinlichkeiten sollten in der Skala 0-1 sein .. aber Sie haben 1,99! Ich denke, Sie haben etwas falsch ..
Ghanem

Antworten:

7

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.

n1k31t4
quelle
Vielen Dank, auch ich habe darüber nachgedacht, einen Schwellenwert zur Klassifizierung der Beschriftungen zu verwenden. Aber auf welcher Grundlage sollte der Schwellenwert festgelegt werden?
Dookoto_Sea
@Dookoto_Sea Sie müssen es selbst entscheiden
Jérémy Blain
@Dookoto_Sea Bitte beachten Sie, dass wenn Ihr Etikett 0 oder 1 ist, Ihr Wert in diesem Bereich liegen sollte. Wenn eine Vorhersagewertskala von [0, 2] faszinierend ist, müssen Sie Ihre Modellausgabe ändern
Jérémy Blain
6

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

y_train_binary = keras.utils.to_categorical(y_train, num_classes)
y_test_binary = keras.utils.to_categorical(y_test, num_classes)

Stellen Sie dann sicher, dass Ihre Ausgabeschicht zwei Neuronen mit einer Softmax-Aktivierungsfunktion hat.

model.add(Dense(num_classes, activation='softmax'))

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).

JahKnows
quelle
3
"Wenn dies ein Klassifizierungsproblem ist, sollten Sie Ihr Netzwerk so ändern, dass es 2 Ausgangsneuronen hat." .. Entschuldigung Jah, aber er sollte es nicht, er kann es mit einem Neuron und Sigmoid anstelle der Softmax-Funktion tun.
Ghanem
@Minion, beide Methoden sind im Wesentlichen gleichwertig. Der Schwellenwert, den Sie sonst für ein einzelnes Ausgangsneuron benötigen würden, ist implizit in das Netzwerk eingebettet. Somit wird der Binärausgang bereitgestellt.
JahKnows
1
Ja, ich weiß ... Ich habe kommentiert, nur weil er erwähnte: "Sollte Ihr Netzwerk so ändern, dass es 2 Ausgangsneuronen hat." .. Danke
Ghanem
1

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.(,

Björn
quelle