我正在为(多种)语义分割任务编写一个自定义损失函数,其中我为目标(2-d数组)和预测计算二进制交叉熵(使用keras后端)。总损失是4种不同损失函数的总和。
在其中两个函数中,我需要制作一个自定义的目标数组,并使用这些目标和预测来计算二进制交叉熵。在这里,我想忽略而不计算目标数组中label为1(前景)的损失。
在pytorch的nll_loss()中,有一个参数'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自定义损失函数。