keras 中像素级二进制分类的最佳损失函数

Posted

技术标签:

【中文标题】keras 中像素级二进制分类的最佳损失函数【英文标题】:The best loss function for pixelwise binary classification in keras 【发布时间】:2018-04-09 05:24:23 【问题描述】:

我建立了一个深度学习模型,它接受大小为 250*250*3 的图像并输出 62500(250*250) 二进制向量,其中包含代表背景的像素中的 0 和代表 ROI 的像素中的 1。 我的模型基于 DenseNet121,但是当我在最后一层使用 softmax 作为激活函数和分类交叉熵损失函数时,损失为 nan。 我可以在模型中使用的最佳损失和激活函数是什么? 二元交叉熵和分类交叉熵损失函数有什么区别? 提前致谢。

【问题讨论】:

【参考方案1】:

我可以在我的模型中使用的最佳损失和激活函数是什么?

使用binary_crossentropy,因为每个输出都是独立的,不互斥并且可以取值0或1,在最后一层使用sigmoid

查看这个有趣的question/answer

二元交叉熵和分类交叉熵损失函数有什么区别?

Here 是该问题的一组很好的答案。

编辑1:我的错,使用binary_crossentropy

在快速查看code(再次)后,我可以看到 keras 使用:

binary_crossentropy -> tf.nn.sigmoid_cross_entropy_with_logits

(From tf docs):测量离散分类任务中的概率误差,其中每个类独立且不互斥。例如,可以执行多标签分类,其中一张图片可以同时包含大象和狗。

categorical_crossentropy -> tf.nn.softmax_cross_entropy_with_logits

(From tf docs):测量类别互斥的离散分类任务中的概率误差(每个条目恰好属于一个类别)。例如,每张 CIFAR-10 图像都标有一个且只有一个标签:图像可以是狗或卡车,但不能同时是两者。

【讨论】:

因为他的输出只有一个通道,Bachground x Foreground,应该是binary_crossentropy

以上是关于keras 中像素级二进制分类的最佳损失函数的主要内容,如果未能解决你的问题,请参考以下文章

Keras 中的像素加权损失函数 - TensorFlow 2.0

非分类掩码的 UNet 损失函数?

如何在 Keras 中进行逐点分类交叉熵损失?

图像分割 - Keras 中的自定义损失函数

Keras中验证集的不同损失函数

Keras 自定义损失函数 - 生存分析截尾