Keras Benutzerdefinierte Metrik für die einzelne Klasse Genauigkeit
Baue ich eine benutzerdefinierte Metrik zur Messung der Genauigkeit von einer Klasse in meiner multi-class-dataset während der Ausbildung. Ich habe Probleme bei der Auswahl der Klasse.
Werden die Ziele heißen (e.g: die Klasse 0 label ist [1 0 0 0 0] :
from keras import backend as K
def single_class_accuracy(y_true, y_pred):
idx = bool(y_true[:, 0]) # boolean mask for class 0
class_preds = y_pred[idx]
class_true = y_true[idx]
class_acc = K.mean(K.equal(K.argmax(class_true, axis=-1), K.argmax(class_preds, axis=-1))) # multi-class accuracy
return class_acc
Das Problem ist, wir haben die Verwendung von Keras Funktionen-index-Tensoren. Wie erstellen Sie einen booleschen Maske für einen tensor? Danke.
- Ich bin nicht vertraut mit Keras und weiß nicht, ob Ihr code wird die Arbeit mit boolean-Masken oder explizite Indizes. Wussten Sie, werfen Sie Ihre Maske auf Typ boolean? tf.cast(binary_mask, tf.bool). Mit Theano, die Sie verwenden können bool_mask.ungleich null (), um die Indizes der boolean-Maske. Lassen Sie uns wissen, ob diese Lösung funktioniert.
- Möchten Sie die Antwort akzeptieren, die mit einem Rückruf?
- Nur um sicherzugehen - y_true ist 2D? was bedeutet der Zeilen und Spalten soll, die hier vertreten?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beachten Sie, dass beim reden über die Genauigkeit mit einer Klasse kann man entweder auf die folgende (nicht äquivalente) zwei Mengen:
Anstatt das zu tun, komplexe Indizierung, können Sie nur verlassen sich auf die Maskierung für Sie die Berechnung. Vorausgesetzt, wir reden über die Präzision, hier (Wechsel zu erinnern wäre trivial).
Wenn Sie wollen, flexibler zu sein, können Sie auch die Klasse von Interesse sind parametriert:
Und verwenden Sie es als:
class_id_true
ich denke, ich habe es geändert.y_true
undy_pred
über die Letzte dimension an, nur mit der Klasse von Interesse.