Метрика TensorFlow: высочайшая точность - PullRequest
2 голосов
/ 19 апреля 2019

Я использую add_metric , пытаясь создать собственную метрику, которая вычисляет верхнюю точность 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.Как я могу реализовать 3 лучших точности?

1 Ответ

2 голосов
/ 19 апреля 2019

Если вы хотите реализовать это самостоятельно, tf.nn.in_top_k очень полезно - возвращает логический массив, который указывает, находится ли цель в верхних 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
...