Как правильно использовать Tensorflow MeanIOU metri c? - PullRequest
0 голосов
/ 03 марта 2020

Я хочу использовать значение MeanIoU c в кератах ( do c link ). Но я не очень понимаю, как это можно интегрировать с keras api. В этом примере прогноз и основополагающая правда даны в виде двоичных значений, но с кератами мы должны получить вероятности, особенно потому, что потеря равна mse ... У нас должно быть что-то вроде:

m = tf.keras.metrics.MeanIoU(num_classes=2)
m.update_state([0, 0, 1, 1], [0.3, 0.6, 0.2, 0.9])

Но теперь результат не тот, у нас есть:

# <tf.Variable 'UnreadVariable' shape=(2, 2) dtype=float64, numpy=array([[2., 0.],
#                                                                        [2., 0.]])>
m.result().numpy() # 0.25

Итак, мой вопрос, как мы должны использовать этот показатель c, если результат модели - вероятности? двоичный или даже в мультиклассовой настройке (один горячий)?

Для точности существует различие между двоичной точностью и категориальной точностью, и они оба принимают вероятности в y_pred. Разве это не должно быть то же самое для MeanIoU?

1 Ответ

1 голос
/ 30 апреля 2020

У меня похожие проблемы. Несмотря на поиск примеров в Интернете, все демонстрации происходят после применения argmax к выводу модели.

Обходной путь, который у меня есть на данный момент, заключается в подклассе tf.keras.metrics.MeanIoU:

class MyMeanIOU(tf.keras.metrics.MeanIoU):
    def update_state(self, y_true, y_pred, sample_weight=None):
        return super().update_state(tf.argmax(y_true, axis=-1), tf.argmax(y_pred, axis=-1), sample_weight)

Это также Можно создать собственную функцию, но рекомендуется использовать подкласс tf.keras.metrics.Metric, если вы хотите sh, чтобы воспользоваться дополнительными функциями, такими как распределенные стратегии.

Я все еще ищу более чистые решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...