Функция nn.in_top_k
Функция nn.in_top_k применяется к предсказаниям модели
и проверяет, находится ли правильный класс среди K
наиболее вероятных вариантов. Первым параметром передаются
логиты или вероятности предсказаний формы
[batch_size, num_classes]. Вторым параметром передаются
истинные метки классов формы [batch_size]. Третьим
параметром передается число K - сколько лучших
предсказаний учитывать. Функция возвращает логический тензор
формы [batch_size], где True означает, что
истинный класс попал в топ-K, а False - что не попал.
Синтаксис
tf.nn.in_top_k(targets, predictions, k, name=None)
Пример
Давайте создадим матрицу логитов для трех примеров и проверим, попадает ли истинный класс в топ-2:
import tensorflow as tf
predictions = tf.constant([
[0.1, 0.6, 0.3],
[0.7, 0.2, 0.1],
[0.2, 0.3, 0.5]
])
targets = tf.constant([1, 0, 2])
res = tf.nn.in_top_k(targets, predictions, k=2)
print(res)
Результат выполнения кода:
tf.Tensor([ True True True], shape=(3,), dtype=bool)
Пример
Давайте проверим попадание в топ-1, где учитывается только самый вероятный класс:
Результат выполнения кода:
tf.Tensor([ True True False], shape=(3,), dtype=bool)
Пример
Давайте применим функцию к батчу из пяти примеров с четырьмя классами и вычислим точность топ-3:
import tensorflow as tf
predictions = tf.constant([
[0.1, 0.5, 0.3, 0.1],
[0.4, 0.2, 0.1, 0.3],
[0.2, 0.1, 0.6, 0.1],
[0.3, 0.3, 0.2, 0.2],
[0.1, 0.1, 0.2, 0.6]
])
targets = tf.constant([1, 3, 0, 2, 0])
res = tf.nn.in_top_k(targets, predictions, k=3)
print(res)
print(tf.reduce_mean(tf.cast(res, tf.float32)))
Результат выполнения кода:
tf.Tensor([ True True True True False], shape=(5,), dtype=bool)
tf.Tensor(0.8, shape=(), dtype=float32)
Смотрите также
-
функцию
top_k,
которая возвращает K наибольших значений и их индексы -
функцию
softmax,
которая преобразует логиты в вероятности -
функцию
sparse_softmax_cross_entropy_with_logits,
которая вычисляет кросс-энтропию по меткам классов -
функцию
softmax_cross_entropy_with_logits,
которая вычисляет кросс-энтропию по one-hot меткам