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 Multi-class 多标签图像分类:处理独立和从属标签和非二进制输出的混合