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