Я реализую код для семантической сегментации с использованием 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, и я не понимаю, почему!?