Hier ist eine Lösung, die für mich für ein Problem mit n = 6 Klassen funktioniert. Wenn Sie viele weitere Klassen haben, ist diese Lösung wahrscheinlich langsam und Sie sollten eine Art Mapping anstelle einer Schleife verwenden.
Angenommen, Sie haben eine heiße codierte Klassenetiketten in Reihen von Tensor labels
und logits (oder posteriors) in Tensor labels
. Wenn dann n
die Anzahl der Klassen ist, versuchen Sie dies:
y_true = tf.argmax(labels, 1)
y_pred = tf.argmax(logits, 1)
recall = [0] * n
update_op_rec = [[]] * n
for k in range(n):
recall[k], update_op_rec[k] = tf.metrics.recall(
labels=tf.equal(y_true, k),
predictions=tf.equal(y_pred, k)
)
Beachten Sie, dass innerhalb tf.metrics.recall
, die Variablen labels
und predictions
zu boolean Vektoren wie in der 2 variable Fall eingestellt werden, was die Verwendung der Funktion ermöglicht.
Diese Funktionen berechnen keine Metriken für jede Klasse separat, wie die Frage fragt. – Avi