gpt4 book ai didi

tensorflow - 平滑骰子损失如何区分?

转载 作者:行者123 更新时间:2023-12-04 01:00:13 25 4
gpt4 key购买 nike

我正在通过最小化 dice_loss 在 keras 中训练 U-Net此问题常用的函数:adapted from herehere

def dsc(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)
score = (2. * intersection + smooth) / (K.sum(y_true_f) + K.sum(y_pred_f) + smooth)
return score

def dice_loss(y_true, y_pred):
return (1 - dsc(y_true, y_pred))

这个实现不同于 traditional dice loss因为它有一个平滑项来使它“可微”。我只是不明白如何添加 smooth术语而不是像 1e-7 这样的东西分母使它变得更好,因为它实际上改变了损失值。我已经通过在带有常规 dice 的测试集上使用训练有素的 unet 模型进行了检查。实现如下:
def dice(im1,im2):
im1 = np.asarray(im1).astype(np.bool)
im2 = np.asarray(im2).astype(np.bool)
intersection = np.logical_and(im1, im2)
return np.float(2. * intersection.sum()) / (im1.sum() + im2.sum() + 1e-7))

有人可以解释为什么通常使用平滑骰子损失吗?

最佳答案

添加 smooth损失并没有使其可区分。使它可区分的是
1.放宽预测阈值:你不投y_prednp.bool ,但将其保留为 0 到 1 之间的连续值
2. 你不使用集合操作作为 np.logical_and ,而是使用逐元素乘积来近似不可微分的相交操作。

您只需添加 smooth避免在 y_pred 时被零除和 y_true不包含任何前景像素。

关于tensorflow - 平滑骰子损失如何区分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51973856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com