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?
InformationsquelleAutor Chris Parry | 2017-01-04
Schreibe einen Kommentar