Метрика тензорного потока: точность top-N

#python #tensorflow #metrics #top-n

#python #тензорный поток #метрики #top-n

Вопрос:

Я использую add_metric, пытаясь создать пользовательскую метрику, которая вычисляет точность top 3 для классификатора. Вот насколько я понял:

 def custom_metrics(labels, predictions):
   # labels => Tensor("fifo_queue_DequeueUpTo:422", shape=(?,), dtype=int64)
   # predictions => {
   #    'logits': <tf.Tensor 'dnn/logits/BiasAdd:0' shape=(?, 26) dtype=float32>,
   #     'probabilities': <tf.Tensor 'dnn/head/predictions/probabilities:0' shape=(?, 26) dtype=float32>,
   #     'class_ids': <tf.Tensor 'dnn/head/predictions/ExpandDims:0' shape=(?, 1) dtype=int64>,
   #     'classes': <tf.Tensor 'dnn/head/predictions/str_classes:0' shape=(?, 1) dtype=string>
   #  }
 

Глядя на существующую реализацию tf.metrics , все реализовано с использованием tf ops. Как я мог бы реализовать точность top 3?

Ответ №1:

Если вы хотите реализовать это самостоятельно tf.nn.in_top_k , это очень полезно — он возвращает логический массив, который указывает, находится ли target в пределах top k прогнозов. Вам просто нужно принять среднее значение результата:

 def custom_metrics(labels, predictions):
    return tf.metrics.mean(tf.nn.in_top_k(predictions=predictions, targets=labels, k=3))
 

Вы также можете импортировать его:

 from tf.keras.metrics import top_k_categorical_accuracy