使用张量流后端使keras丢失不会对未标记像素上的分段网络造成损害

时间:2018-06-03 08:46:08

标签: python tensorflow keras

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

1 个答案:

答案 0 :(得分:0)

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]))

这是我最终提出的不惩罚未标记部分的分割模型