为什么要在 Keras 中获取自定义 Dice 损失的 NaN 值?

时间:2021-02-22 19:37:18

标签: python tensorflow keras

我正在使用 Keras 使用 Unet 进行边界/轮廓检测。当我使用二元交叉熵作为损失时,损失随着时间的推移而减少,正如预期的那样,预测边界看起来很合理

但是,我已经尝试使用不同 LR 为 Dice 自定义损失,但都没有效果。

smooth = 1e-6
def dice_coef(y_true, y_pred):
    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 dice(y_true, y_pred):
    return 1-dice_coef(y_true, y_pred)

损失值没有改善。也就是说,它会显示类似

loss: nan - dice: .9607 - val_loss: nan - val_dice: .9631

我得到了 diceval_dice 的损失和值的 NaN,随着 epoch 的迭代几乎没有变化。这与我为 LR 使用什么无关,无论是 .01 到 1e-6

训练图像/标签的尺寸看起来像 N x H x W x 1,其中 N 是图像的数量,H/W 是每个图像的高度/宽度

有人可以帮忙吗?

0 个答案:

没有答案