Я использую взвешенную двоичную кросс-энтропийную потерю кубиков для проблемы сегментации с дисбалансом класса (в 80 раз больше черных пикселей, чем белых пикселей).
def weighted_bce_dice_loss(y_true, y_pred):
y_true = K.cast(y_true, 'float32')
y_pred = K.cast(y_pred, 'float32')
averaged_mask = K.pool2d(
y_true, pool_size=(50, 50), strides=(1, 1), padding='same', pool_mode='avg')
weight = K.ones_like(averaged_mask)
w0 = K.sum(weight)
weight = 5. * K.exp(-5. * K.abs(averaged_mask - 0.5))
w1 = K.sum(weight)
weight *= (w0 / w1)
loss = weighted_bce_loss(y_true, y_pred, weight) + dice_loss(y_true, y_pred)
return loss
Коэффициент костей увеличился, а потери уменьшились, но в каждую эпоху я получаю черное изображение на выходе (все пиксели помечены черным)

Есть идеи, почему это происходит?