Как выглядит ваша реализация DS C Loss? А какую функцию активации вы используете? Я лично использовал:
def dice_coef(y_true, y_pred, smooth=1e-3):
y_true_f = K.flatten(y_true)
y_pred_f = K.flatten(y_pred)
intersection = K.sum(y_true_f * y_pred_f)
dice = (2. * intersection + smooth) / (K.sum(y_true_f) + K.sum(y_pred_f) + smooth)
return dice
def dice_coef_loss(y_true, y_pred):
return 1 - dice_coef(y_true, y_pred)
в качестве функции потерь и metri c в нескольких архитектурах сегментации U- Net, а сигмоид - в качестве функции активации (при условии, что это проблема двоичной классификации). Кроме того, если вы оптимизируете IOU, вы можете изменить свою потерю на потерю IOU - что-то вроде:
def iou(y_true, y_pred, smooth=1e-3):
intersection = K.sum(K.abs(y_true * y_pred), axis=-1)
union = K.sum((y_true,-1) + K.sum(y_pred,-1) - intersection
return (intersection + smooth) / ( union + smooth)
def iou_loss(y_true, y_pred):
return -iou_coef(y_true, y_pred)
Надеюсь, это поможет!