如何正确使用Tensorflow MeanIOU指标?

问题描述 投票:0回答:1

我想在keras(doc link)中使用MeanIoU度量。但是我不太了解如何将它与keras api集成在一起。在该示例中,预测和基本事实以二进制值给出,但使用keras时,我们应该获得概率,尤其是因为损失是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

所以我的问题是,如果模型的输出是概率,我们应该如何使用该度量?二进制甚至是多类设置(一个热点)?

对于精度,BinaryAccuracy和CategoricalAccuracy之间有区别,它们都采用y_pred中的概率。 MeanIoU不应该一样吗?

python tensorflow tensorflow2.0 tf.keras
1个回答
0
投票

我有类似的问题。尽管在线查找示例,但所有演示都在对模型输出应用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)

我仍在寻找更清洁的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.