Keras 中二进制分类的输出层

Posted

技术标签:

【中文标题】Keras 中二进制分类的输出层【英文标题】:Output layer for Binary Classification in Keras 【发布时间】:2020-07-20 12:44:36 【问题描述】:

我需要将图像分类为癌性或非癌性。

为此,我构建了一个经典的 CNN,但我在使用这样的两列向量标记我的数据集之间犹豫不决:

cancerous: [0, 1]
not cancerous: [1, 0]

并使用具有 2 个输出神经元的 softmax 激活函数。

model.add(Dense(2, activation='softmax'))

cancerous: [1]
not cancerous: [0]

并使用带有一个输出神经元的 sigmoid 激活函数。

model.add(Dense(1, activation='sigmoid'))

鉴于我需要使用患癌概率作为患者的最终指标以及绘制 ROC 曲线,哪种模型更好?

【问题讨论】:

这个问题被问及详细回答here。它没有谈论 ROC,但您可能仍然会发现它很有用。 使用 sigmoid 或 softmax 激活与使用二进制或 one-hot 编码标签直接相关,您应该完全意识到这一点,因为您对已删除的答案做出了不正确的评论。 【参考方案1】:

一般的趋势是使用带有sigmoid曲线的多个输出节点进行多标签分类。通常,softmax 用于多类分类,其中 softmax 预测每个输出的概率,我们选择概率最高的类。对于二元分类,我们可以选择单个神经元输出通过 sigmoid,然后设置一个阈值来选择类别,或者使用两个神经元输出然后执行 softmax。在任何一种情况下,阈值化都是可能的。绘制具有单个神经元输出的 ROC 曲线相当容易,因为您必须对一个值设置阈值。因此,您可以轻松使用model.add(Dense(1, activation='sigmoid'))

【讨论】:

以上是关于Keras 中二进制分类的输出层的主要内容,如果未能解决你的问题,请参考以下文章

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

keras中二元分类的类不平衡

Keras Multi-class 多标签图像分类:处理独立和从属标签和非二进制输出的混合

在二进制分类的情况下,最后一个密集层中的单元数

具有 2 个单元和 softmax 的输出层是使用 LSTM 进行二进制分类的理想选择吗?

Keras中具有二进制分类的多标签