【发布时间】:2020-05-22 05:27:39
【问题描述】:
我在训练UNET时,dice coef和iou有时会大于1和iou > dice,然后经过几批又恢复正常。
如picture所示。
我将它们定义如下:
def dice_coef(y_true, y_pred, smooth=1):
y_true_f = K.flatten(y_true)
y_pred_f = K.flatten(y_pred)
intersection = K.sum(y_true_f * y_pred_f)
return (2. * intersection + smooth) / (K.sum(y_true_f) + K.sum(y_pred_f) + smooth)
def iou(y_true, y_pred, smooth=1):
y_true_f = K.flatten(y_true)
y_pred_f = K.flatten(y_pred)
intersection = K.sum(y_true_f * y_pred_f)
union = K.sum(y_true_f) + K.sum(y_pred_f) - intersection
return (intersection + smooth) / (union + smooth)
def dice_loss(y_true, y_pred):
return 1. - dice_coef(y_true, y_pred)
我尝试将K.abs() 添加到 y_pred 中,但这会导致性能下降。我觉得由于输出是 sigmoid 激活的,是否添加 K.abs() 应该给出相同的结果?另外,正如您所看到的,我的准确性很奇怪,我一直依靠骰子来判断我的模型性能,如果有人能指出这个问题,那就更好了。
【问题讨论】:
-
你的
y_true图片真的在0到1之间吗?检查这个。 -
也许您可以分享您的
model.summary()、层的定义(至少是最后一层)、y_true的“测量”形状和范围。 (我知道你说没关系,但有时我们会误会,我们每个人:p) -
你是对的!!!我的 y_ture 不在 (0,1) 中 :( 我已经修好了,谢谢
-
酷 :) -- 所以如果你认为它解决了所有问题,请将答案标记为有效 :)
标签: keras deep-learning image-segmentation