Python 使用tensorflow后端使keras丢失不会惩罚未标记像素上的分割网络

Python 使用tensorflow后端使keras丢失不会惩罚未标记像素上的分割网络,python,tensorflow,keras,Python,Tensorflow,Keras,我正在训练一个神经网络来进行图像分割。并非图像的所有部分都已标记,未标记的部分也不一致地位于同一位置(即最后一行或最后一列)。未标记的像素的标签为-1,而标记的像素为0或1。当我计算二进制交叉熵损失时,我将输出展平,然后执行标准对数损失。所以我想知道在tensorflow中是否有可能获得所有-1行的索引,这样我就可以生成一个掩码来抵消未标记部分造成的损失 def make_mask(labels): mask = tf.clip_by_value(labels, - 1, 0)

我正在训练一个神经网络来进行图像分割。并非图像的所有部分都已标记,未标记的部分也不一致地位于同一位置(即最后一行或最后一列)。未标记的像素的标签为-1,而标记的像素为0或1。当我计算二进制交叉熵损失时,我将输出展平,然后执行标准对数损失。所以我想知道在tensorflow中是否有可能获得所有-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]))

这就是我最终提出的不惩罚未标记零件分割模型的方法

请更深入地描述您的问题以及预期结果