Keras 中二进制分类的输出层
Output layer for Binary Classification in 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 曲线,哪个模型更好?
一般的趋势是使用多输出节点和sigmoid曲线进行多标签class化。通常,softmax 用于 multiclass classification,其中 softmax 预测每个输出的概率,我们选择概率最高的 class。对于二进制classification,我们可以选择通过sigmoid传递的单个神经元输出,然后设置一个阈值来选择class,或者使用两个神经元输出然后执行softmax。在任何一种情况下,阈值是 possible.It 都非常容易绘制具有单个神经元输出的 ROC 曲线,因为您必须对一个值设置阈值。因此,您可以轻松地使用 model.add(Dense(1, activation='sigmoid'))
我需要将图像分类为癌性或非癌性。
为此,我构建了一个经典的 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 曲线,哪个模型更好?
一般的趋势是使用多输出节点和sigmoid曲线进行多标签class化。通常,softmax 用于 multiclass classification,其中 softmax 预测每个输出的概率,我们选择概率最高的 class。对于二进制classification,我们可以选择通过sigmoid传递的单个神经元输出,然后设置一个阈值来选择class,或者使用两个神经元输出然后执行softmax。在任何一种情况下,阈值是 possible.It 都非常容易绘制具有单个神经元输出的 ROC 曲线,因为您必须对一个值设置阈值。因此,您可以轻松地使用 model.add(Dense(1, activation='sigmoid'))