【问题标题】:Making keras loss using tensorflow back-end not penalize segmentation network on unlabeled pixels使用 tensorflow 后端进行 keras 损失不会惩罚未标记像素上的分割网络
【发布时间】:2018-06-03 17:43:22
【问题描述】:

我正在训练一个神经网络来执行图像分割。并非图像的所有部分都被标记,并且未标记的部分并非始终位于同一位置(即最后一行或最后一列)。未标记像素的标记为 -1,而标记为 0 或 1。当我计算二进制交叉熵损失时,我将输出展平,然后执行标准对数损失。所以我想知道它是否可以在 tensorflow 中获取所有 -1 行的索引,以便我可以生成一个掩码来消除未标记部分造成的损失。

【问题讨论】:

  • 请提供更深入的描述您的问题是什么以及预期的结果是什么

标签: python tensorflow keras


【解决方案1】:
def make_mask(labels):
    mask = tf.clip_by_value(labels, - 1, 0)
    mask = tf.ones_like(mask) - tf.abs(mask)
    return mask

def my_cross_entropy(y_true, y_pred):
    mask = make_mask(y_true)

    log_val = tf.clip_by_value(y_pred, 1e-7, 1 - 1e-7)
    hx_0 = tf.log(log_val)
    hx_1 = tf.log(1 - log_val)
    cross_entropy = (y_true * hx_0 + (1 - y_true) * hx_1) * mask

    return tf.reduce_mean(-tf.reduce_sum(cross_entropy, reduction_indices=[1]))

这就是我最终想出的不惩罚未标记部分上的分割模型的方法

【讨论】:

    猜你喜欢
    • 2020-07-18
    • 2021-01-14
    • 2020-09-01
    • 2021-04-01
    • 2018-10-19
    • 2017-07-24
    • 2018-09-23
    • 2019-12-10
    • 2019-12-31
    相关资源
    最近更新 更多