Моя обобщенная функция потери игральных костей, использующая бэкэнд Keras, возвращает NaN, и я не понимаю, почему - PullRequest
1 голос
/ 23 мая 2019

Я реализую код для семантической сегментации с использованием Keras, и я написал свою функцию потерь, как в статье «Обобщенное перекрытие костей как функция глубоких потерь при обучении для сильно несбалансированных сегментаций» (ссылка: https://arxiv.org/abs/1707.03237) для баланса каждого класс. Мои данные организованы как (bacth_size, ImDim1, ImDim2, Nclasses). Моя функция потери:

eps = 1e-3

def dice(y_true, y_pred):
    weights = 1./K.sum(y_true, axis=[0,1,2])
    weights = weights/K.sum(weights)
    num = K.sum(weights*K.sum(y_true*y_pred, axis=[0,1,2]))
    den = K.sum(weights*K.sum(y_true+y_pred, axis=[0,1,2]))
    return 2.*(num+eps)/(den+eps)

def dice_loss(y_true, y_pred):
    return 1-dice(y_true, y_pred)

При таком подходе, который мне кажется правильным, функция потерь возвращает nan, и я не понимаю, почему!?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...