Точность и точность в моделях Keras

Я пытаюсь вручную рассчитать точность и точность моей модели Keras. Я посмотрел на функцию metrics.py, и у нее есть приведенный ниже код для расчета точности.

def precision(y_true, y_pred):
   '''Calculates the precision, a metric for multi-label classification of
   how many selected items are relevant.
   '''
   true_positives = K.sum(K.round(K.clip(y_true * y_pred, 0, 1)))
   predicted_positives = K.sum(K.round(K.clip(y_pred, 0, 1)))
   precision = true_positives / (predicted_positives + K.epsilon())
return precision

Чего я не понимаю, так это почему мы должны делать y_true * y_pred, чтобы получить истинные положительные результаты? Мой y_pred — это вектор длины 7, который имеет вероятность для каждого пикселя в моем изображении, а мой y_true — это вектор с горячим кодированием длиной 7. Может ли кто-нибудь помочь мне понять y_true * y_pred при вычислении истинных положительных результатов.

Также используя приведенную выше функцию точности в качестве эталона, я использую приведенную ниже пользовательскую функцию для точности.

def overall_acc(y_true, y_pred):
    y_true_2D = K.max(y_true, axis=1, keepdims=False)
    y_pred_2D = K.max(y_true*y_pred, axis=1, keepdims=False)
    y_true_f = K.sum(K.flatten(y_true_2D))
    y_pred_f = K.sum(K.flatten(y_pred_2D))
    acc = y_pred_f / (y_true_f)

return acc

Это правильный способ расчета точности?

Любая помощь приветствуется.


person Lisa Mathew    schedule 18.09.2018    source источник
comment
Вы выполняете классификацию по нескольким меткам или по одной метке?   -  person today    schedule 18.09.2018
comment
@сегодня я делаю семантическую сегментацию своего изображения. пытаясь найти вероятность того, что каждый пиксель принадлежит к одному из 7 классов. Вы бы назвали это многоуровневой классификацией?   -  person Lisa Mathew    schedule 18.09.2018
comment
В вашей спецификации проблемы может ли один пиксель принадлежать более чем к одному классу? Тогда это классификация с несколькими метками, в противном случае это классификация с одной меткой; и эта функция precision, на которую вы ссылались, используется для случая с несколькими метками (как это было упомянуто в его строке документации).   -  person today    schedule 18.09.2018
comment
@today Ни один пиксель не может принадлежать только одному классу. Как рассчитать точность и правильность для задачи классификации с одной меткой?   -  person Lisa Mathew    schedule 18.09.2018
comment
Затем вы можете использовать аргумент metrics=['accuracy'] при компиляции модели. Затем, если вы хотите оценить свою модель на новых тестовых данных, вы можете использовать метод evaluate. . Поскольку вы использовали 'accuracy' в качестве метрики, одним из результатов метода evaluate будет точность модели. Прочитайте документы и этот ответ для получения дополнительной информации.   -  person today    schedule 18.09.2018
comment
@today да, я использовал metrics=['accuracy'] и loss = 'binary_crossentrophy' . Но я хотел подтвердить, что точность, которую я получаю с помощью метода оценки, верна, вычислив точность вручную. И я не был уверен, как вручную рассчитать точность. Спасибо за ваши ответы.   -  person Lisa Mathew    schedule 19.09.2018
comment
Давайте продолжим обсуждение в чате.   -  person Lisa Mathew    schedule 19.09.2018
comment
binary_crossentropy как потеря? Вы не выполняете классификацию по нескольким меткам, так почему binary_crossentropy? И, возможно, вы использовали sigmoid как активацию последнего слоя?   -  person today    schedule 19.09.2018