Пользовательские метрики keras для классификации по нескольким меткам - PullRequest
0 голосов
/ 29 октября 2018

Я использую sigmoid и binary_crossentropy для классификации по нескольким меткам.

Например, метка y_true похожа на [1,0,1,0,0], а метка y_pred похожа на [0.8,0.3,0.9,0,0].

Как настроить функцию метрики Keras, чтобы каждый элемент в y_pred больше 0,5 отображался в 1, каждый элемент в y_pred ниже 0,5 сопоставлялся в 0, а затем сравнивал количество меток в y_pred, что соответствует y_true?

1 Ответ

0 голосов
/ 29 октября 2018

Поскольку вы выполняете классификацию по нескольким меткам, кажется, что вы хотите сравнить целые истинные и предсказанные метки друг с другом. Например, для одной отдельной выборки с истинной меткой [1, 0, 0] и прогнозируемой меткой [0, 0, 0] вы рассматриваете точность прогнозирования как ноль (несмотря на то, что метки для второго и третьего классов были предсказаны правильно). Если это так, вы можете сравнить метки и затем использовать метод all() из бэкэнда, чтобы убедиться, что метки для всех классов совпадают:

from keras import backend as K

def full_multi_label_metric(y_true, y_pred):
    comp = K.equal(y_true, K.round(y_pred))
    return K.cast(K.all(comp, axis=-1), K.floatx())
...