Я пишу пользовательскую функцию потерь для (своего рода) задачи семантической сегментации, в которой я вычисляю двоичную кроссцентропию (используя keras backend) для цели (двумерный массив) и прогнозов. Общая потеря представляет собой сумму 4 различных функций потерь.
В двух из этих функций мне нужно создать настраиваемый целевой массив и вычислить двоичную кроссентропию с этими целями и прогнозами. Здесь я хотел бы игнорировать и не рассчитывать потери, когда метка равна 1 (передний план) в целевом массиве.
В nll_loss () pytorch есть параметр ignore_index, который похож на то, что я пытаюсь сделать.
Я пытаюсь достичь чего-то вроде:
def binary_crossentropy(y_true, y_pred, ignore_label=1):
if ignore_label == 1:
return -(1-y_true)*log(1-y_pred)
if ignore_label == 0:
return -y_true*log(y_pred)
return -(y_true*log(y_pred) + (1-y_true)*log(1-y_pred))
Но для пользовательской функции потерь keras.