【问题标题】:tf.keras.metrics.MeanIoU with sigmoid layertf.keras.metrics.MeanIoU 与 sigmoid 层
【发布时间】:2020-05-16 08:06:42
【问题描述】:

我有一个用于语义分割的网络,我的模型的最后一层应用了 sigmoid 激活,因此所有预测都在 0-1 之间缩放。有这个验证指标 tf.keras.metrics.MeanIoU(num_classes),它将分类预测(0 或 1)与验证(0 或 1)进行比较。因此,如果我进行预测并应用此指标,它会自动将连续预测映射到阈值 = 0.5 的二进制吗?是否有可能手动定义阈值?

【问题讨论】:

    标签: validation binary tf.keras sigmoid keras-metrics


    【解决方案1】:

    不,tf.keras.metrics.MeanIoU 不会自动将连续预测映射到阈值 = 0.5 的二进制。

    它将连续预测转换为二进制,通过将小数点前的二进制数字作为预测,如0.9900.5000.010,@987654328 @ 作为11.01 作为1num_classes=2所以基本上如果你的预测值在01num_classes=2 之间,那么除非预测是1,否则一切都被认为是0

    以下是证明tensorflow version 2.2.0 中行为合理性的实验:

    所有二进制结果:

    import tensorflow as tf
    
    m = tf.keras.metrics.MeanIoU(num_classes=2)
    _ = m.update_state([0, 0, 1, 1], [0, 0, 1, 1])
    m.result().numpy()
    

    输出 -

    1.0
    

    将一个预测更改为连续 0.99 - 这里它认为 0.990

    import tensorflow as tf
    
    m = tf.keras.metrics.MeanIoU(num_classes=2)
    _ = m.update_state([0, 0, 1, 1], [0, 0, 1, 0.99])
    m.result().numpy()
    

    输出 -

    0.5833334
    

    将一个预测更改为连续 0.01 - 这里它认为0.010

    import tensorflow as tf
    
    m = tf.keras.metrics.MeanIoU(num_classes=2)
    _ = m.update_state([0, 0, 1, 1], [0, 0.01, 1, 1])
    m.result().numpy()
    

    输出 -

    1.0
    

    将一个预测更改为连续的 1.99 - 这里它认为 1.991

    %tensorflow_version 2.x
    import tensorflow as tf
    
    m = tf.keras.metrics.MeanIoU(num_classes=2)
    _ = m.update_state([0, 0, 1, 1], [0, 0, 1, 1.99])
    m.result().numpy()
    

    输出 -

    1.0
    

    所以理想的方法是在评估MeanIoU之前定义一个函数将连续转换为二进制。

    希望这能回答您的问题。快乐学习。

    【讨论】:

    • @WillemBoone - 希望我们已经回答了您的问题。如果您对答案感到满意,请您接受并投票。
    【解决方案2】:

    试试这个(记得用tab替换空格):

    def mean_iou(y_true, y_pred):
        th = 0.5
        y_pred_ = tf.to_int32(y_pred > th)
        score, up_opt = tf.metrics.mean_iou(y_true, y_pred_, 2)
        K.get_session().run(tf.local_variables_initializer())
        with tf.control_dependencies([up_opt]):
            score = tf.identity(score)
        return score
    

    【讨论】:

      猜你喜欢
      • 2018-01-08
      • 2017-05-15
      • 2020-09-02
      • 2021-09-30
      • 2021-07-29
      • 2017-03-14
      • 2020-12-05
      • 2021-12-16
      • 1970-01-01
      相关资源
      最近更新 更多