Was ist y_true und y_pred beim erstellen einer benutzerdefinierten Metrik in Keras?
Ich umsetzen will, meine benutzerdefinierte Metrik in Keras. Laut der Dokumentation, meine benutzerdefinierte Metrik sollte definiert werden als eine Funktion, die als Eingabe zwei Tensoren, y_pred
und y_true
aus und liefert eine single-tensor-Wert.
Aber ich bin verwirrt, was genau enthalten sind, werden diese Tensoren y_pred
und y_true
wenn die Optimierung läuft. Es ist nur ein Datenpunkt? Ist es der gesamte Stapel? Das ganze Epoche (vermutlich nicht)? Gibt es eine Möglichkeit um diese Tensoren' Formen?
Kann jemand darauf, um eine Vertrauenswürdige Stelle, wo ich diese Informationen erhalten? Jede Hilfe würde geschätzt werden. Nicht sicher, ob relevant, aber ich bin mit TensorFlow backend.
Dinge, die ich bisher ausprobiert, um diese zu beantworten:
- Überprüfung der Keras Metriken Dokumentation (keine Erklärung darüber, was diese Tensoren sind).
- Überprüfung der source-code für die Keras Metriken und versuchen diese zu verstehen, Tensoren, indem man die Keras Umsetzung für die anderen Metriken (Dies scheint darauf hinzuweisen, dass
y_true
undy_pred
haben die Etiketten für einen ganzen Stapel, aber ich bin mir nicht sicher). - Lesen dieser stackoverflow-Fragen: Eins, Zwei, Drei, und andere (keiner meine Frage beantworten, die meisten sind zentriert auf dem OP nicht klar verstehen den Unterschied zwischen einem tensor und die Werte berechnet, die tensor während der Sitzung).
- Drucken der Werte von
y_true
undy_pred
während der Optimierung durch die Definition einer Metrik wie diese:
def test_metric(y_true, y_pred):
y_true = K.print_tensor(y_true)
y_pred = K.print_tensor(y_pred)
return y_true - y_pred
(leider sind diese nicht alles drucken während der Optimierung).
- Dieses könnte helfen, stackoverflow.com/questions/43576922/...
- Danke. Ich lese es, aber es ist mir nicht klar, wie das hilft, kannst du das etwas erläutern?
- Danke!!! Ich hatte genau diese Frage!
Du musst angemeldet sein, um einen Kommentar abzugeben.
y_true und y_pred
Den tensor
y_true
ist die wahre-Daten - (oder Ziel, ground truth), passieren Sie die Pass-Methode.Es ist eine Umwandlung der numpy-array
y_train
in ein tensor ist.Den tensor
y_pred
ist der Daten vorhergesagt (berechnet, output), die von Ihrem Modell.In der Regel, sowohl
y_true
undy_pred
haben genau die gleiche Form. Ein paar der Verluste, wie die lichten lieben, akzeptieren, können Sie mit verschiedenen Formen.Die Form
y_true
Es enthält einen ganzen Stapel. Seine erste dimension ist immer die batch-Größe, und es muss vorhanden sein, auch wenn der Stapel hat nur ein element.
Zwei sehr einfache Möglichkeiten, die Form zu finden, von
y_true
sind:print(Y_train.shape)
model.summary()
und sehen Sie die Letzte AusgabeAber seine ersten dimension werden die batch-Größe.
Also, wenn Ihre Letzte Schicht Ausgänge
(None, 1)
die Formy_true
ist(batch, 1)
. Wenn die Letzte Schicht Ausgänge(None, 200,200, 3)
, danny_true
wird(batch, 200,200,3)
.Benutzerdefinierte Metriken und-Verlust-Funktionen
Unfotunately, drucken benutzerdefinierte Metriken wird nicht verraten Ihre Inhalte.
Sie können Ihre Formen mit
print(K.int_shape(y_pred))
zum Beispiel.Denken Sie daran, dass diese Bibliotheken den ersten "kompilieren ein graph", später dann "läuft es mit Daten". Wenn Sie definieren, Ihren Verlust, Sie sind in der compile-phase und Fragen für Daten braucht das Modell zu laufen.
Aber selbst wenn das Ergebnis Ihres metric multidimensional ist, keras wird automatisch Wege finden, um die Ausgabe einer einzelnen skalaren für die Metrik. (Nicht sicher, was ist die Bedienung, aber sehr wohl ein
K.mean()
unter dem Tisch versteckt).Quellen. Nachdem Sie gewöhnen keras, dieses Verständnis wird natürlich aus, einfach zu Lesen in diesem Artikel:
Wahr Etiketten bedeuten true/Ziel-Daten. Labels wird einem schlecht gewählten Wort hier, es ist eigentlich nur "Etiketten" für die Klassifizierung von Modellen.
Prognosen bedeuten die Ergebnisse des Modells.
K.max(y_true, axis=0)
?binary_crossentropy
als Verlust der Funktion, und keras automatisch mit einer Genauigkeit geeignet für, dass, basierend aufK.round(y_pred)
. - github.com/fchollet/keras/blob/master/keras/metrics.pymetrics=['mae']
(mittlerer absoluter Fehler), oder verwenden Siedef metr(true, pred): return K.mean(pred-true)
mitmetrics=[metr]
y_pred
hat die gleiche Form wiey_true
aus dem letzten Abschnitt Ihres Kommentars. E. g. wenn mein Modell Ausgabey_pred
Form[None, seq_length, feature_size]
danny_true
ist auch ein 3-D-tensor (geprüft) jedoch gebe ich nur 2-D-tensor infit
Methode. Also der Letzte Kommentar sollte gelesen werden alsy_true
hat die Form derselben alsy_pred
.y_true
ist der wahre Wert (Etiketten). undy_pred
ist-Werte, die Ihre NN-Modell vorhergesagt.Die Größe (Form) der Tensoren ist determent von der Größe des batches (nb_batches).
y_true
wäre (N,B) oder (B,N)? Oder etwas anderes?