首页 > 解决方案 > Keras 中二进制分类的输出层

问题描述

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

为此,我构建了一个经典的 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 曲线,哪种模型更好?

标签: pythonkerasneural-networkclassificationlayer

解决方案


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


推荐阅读