Потеря игральных костей дает двоичный выход, тогда как двоичная кроссентропия создает карту вероятностного выхода - PullRequest
0 голосов
/ 08 января 2019

В настоящее время я экспериментирую с различными функциями потерь и оптимизаторами для моей проблемы сегментации двоичного изображения. Однако функции потерь, которые я использую в своем 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. Как это возможно, что эти разные функции потерь имеют эти совершенно разные результаты?

  1. Есть ли способ настроить функцию потери игральных костей таким образом, чтобы карта выходной сегментации представляла собой карту вероятностей, аналогичную той, которая относится к потере двоичной кроссцентропии.
...