我正在尝试在Keras中实现加权二进制交叉熵函数,以用于语义分割问题。
我的 y_true 和 y_pred 的形状像(batch,h,w,1)。因此,对于每个像素,我都会生成一些权重,范围从1到4。通常的weight_map看起来像这样:
weights_map的形状为(h,w,1),即,为批次中的每个y计算weight_map。
现在我写的损失函数是这样:
from keras.losses import binary_crossentropy
def weighted_bce_loss(y_true, y_pred):
loss = binary_crossentropy(y_true, y_pred)
weights = weight_map(y_true)
loss = loss * weights
return loss
我相信我可以将每个像素的损失乘以权重图,然后进一步将平均值作为输出损失。权重为1的像素将保持不变,而对于具有更高值的像素,损耗将成倍增加。但是,这种损失函数似乎不起作用,因为即使经过几个时期,我也无法在一个简单的数据集上收敛。知道我要去哪里错了吗?