使用Softmax进行二进制分类

时间:2017-08-21 09:38:35

标签: binary classification keras softmax sigmoid

我正在使用Sigmoid激活函数和二进制交叉熵训练二元分类器,其准确率高达98%左右。
当我使用带有categorical_crossentropy的softmax进行训练时,精度非常低(<40%)。 我将binary_crossentropy的目标作为0和1的列表传递,例如; [0,1,1,1,0]。

知道为什么会这样吗?

这是我用于第二个分类器的模型: enter image description here

1 个答案:

答案 0 :(得分:14)

现在,你的第二个模型总能回答&#34; 0级和34级;因为它只能在一个类别(最后一层的输出数量)之间进行选择。

由于你有两个类,你需要在两个输出上计算softmax + categorical_crossentropy以选择最可能的一个。

因此,您的最后一层应为:

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

你的sigmoid + binary_crossentropy模型,它计算&#34; Class 0&#34;的概率。通过分析单个输出数字为真,已经是正确的。

编辑:以下是关于Sigmoid功能的小解释

Sigmoid可以被视为实数空间和概率空间之间的映射。

Sigmoid Function

请注意:

Sigmoid(-infinity) = 0   
Sigmoid(0) = 0.5   
Sigmoid(+infinity) = 1   

因此,如果网络的实数,输出非常低,则sigmoid将决定&#34; Class 0&#34;接近0,并决定&#34; Class 1&#34;
相反,如果你的网络输出非常高,那么sigmoid将决定&#34; Class 0&#34;接近1,并决定&#34; 0级和#34;

它的决定类似于仅通过查看输出的符号来决定类。但是,这不允许您的模型学习!实际上,这种二进制损失的梯度几乎无处不在,使得模型无法从错误中学习,因为它没有被正确量化。

这就是为什么sigmoid和&#34; binary_crossentropy&#34;使用:
它们是二进制损失的替代品,它具有良好的平滑特性,并且可以实现学习。

另外,请找到有关Softmax FunctionCross Entropy

的更多信息