Как применить top_k_categorical_accuracy к размерности партии в Keras - PullRequest
0 голосов
/ 04 августа 2020

Я делаю нестандартные метри c в керасах на основе top_k_categorical_accuracy. В моей пользовательской функции metri c я получаю y_true и pred (два тензора) с 3 измерениями, имеющими форму (batch_size, d2, d3) , но, очевидно, top_k_categorical_accuracy ожидает 2-мерный тензор .

tf.keras.metrics.top_k_categorical_accuracy(y_true, y_pred, k=2)

Мой вопрос в том, как я могу применить эту функцию top_k к разным пакетам?

В приведенном ниже примере я ожидаю, что вывод metri c будет 1/2 (с k = 2).

Это можно сделать, взяв K.mean из top_k_categorical_accuracy(y_true[0], y_pred[0]) (1-я партия дает 2/3 ) и top_k_categorical_accuracy(y_true[1], y_pred[1]) (2-я партия дает 1/3 ). Таким образом, среднее значение будет 1/2

y_true = [
    [[0, 0, 1], [0, 1, 0], [1, 0, 0]],
    [[0, 0, 1], [0, 1, 0], [1, 0, 0]]
]
y_pred = [
    [[0.1, 0.7, 0.2], [0.05, 0.95, 0], [0.2,0.3,0.5]],
    [[0.7, 0.2, 0.1], [0.95, 0, 0.05], [0.3,0.2,0.5]]
]

1 Ответ

1 голос
/ 05 августа 2020

Поскольку только последнее измерение является фактическим предсказанием класса, вы можете преобразовать первые два измерения в одно, используя K.reshape:

y_true = K.reshape(y_true, shape=(-1,3))
y_pred = K.reshape(y_pred, shape=(-1,3))

Тогда тензоры будут соответствовать требованиям формы API и давать средний балл в пакете * d1, который также является средним по пакету, как вы запрашивали, так как каждый пакет имеет одинаковое количество d1.

...