пользовательские метрики keras для классификации по нескольким меткам

Я использую 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?


person user6456568    schedule 29.10.2018    source источник


Ответы (1)


Поскольку вы выполняете классификацию по нескольким меткам, кажется, что вы хотите сравнить все истинные и предсказанные метки друг с другом. Например, для одной отдельной выборки с истинной меткой [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())
person today    schedule 29.10.2018
comment
Согласно @today: stackoverflow.com/questions/51890883/ - person from keras import michael; 29.10.2018