目前,我正在尝试各种损失函数和优化器来解决我的二进制图像分割问题。但是,我在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。这些不同的损失函数如何可能会产生截然不同的结果?