根据 stackoverflow 上 Kanak 的推荐,我在这里发布了这个问题:
目前我正在为我的二值图像分割问题尝试各种损失函数和优化器。然而,我在 Unet 中使用的损失函数给出了不同的输出分割图。
我有一个高度不平衡的数据集,因此我正在尝试骰子损失,下面给出了自定义函数。
def dice_coef(y_true, y_pred, smooth=1):
"""
Dice = (2*|X & Y|)/ (|X|+ |Y|)
= 2*sum(|A*B|)/(sum(A^2)+sum(B^2))
ref: https://arxiv.org/pdf/1606.04797v1.pdf
"""
intersection = K.sum(K.abs(y_true * y_pred), axis=-1)
return (2. * intersection + smooth) / (K.sum(K.square(y_true), -1) + K.sum(K.square(y_pred), -1) + smooth)
def dice_coef_loss(y_true, y_pred):
return 1 - dice_coef(y_true, y_pred)
二进制交叉熵产生一个概率输出图,其中每个像素都有一个颜色强度,表示该像素是正类或负类的机会。但是,当我使用骰子损失函数时,输出不是概率图,而是像素被分类为 0 或 1。
我的问题是:
1.这些不同的损失函数怎么可能有这些截然不同的结果?
- 有没有办法自定义骰子损失函数,使输出分割图是类似于二元交叉熵损失的概率图。