2017-03-14 66 views
0

我已经看到我们可以使用Dense(num_classes, ...)作为输出层,但我也看到Dense((num_classes-1), ...),特别是在谈论二进制分类时。你使用哪个,为什么?Keras:多类分类密集层

回答

0

这是我的2美分,

我使用密集(num_classes),因为我可以在该层的输出计算SOFTMAX。

对于二元分类,我们通常使用交叉熵作为损失函数。因此,我们只需要计算p(x = 1)和p(x = 0)就可以计算为1 - p(x = 1)。

对于多类分类,将输出大小减少1的唯一优点是减少参数个数,因为我们可以计算p(x = k)= 1 - sum_ {i = 1}^K p(x = i),因为K是数字类别。所以如果你打算不使用softmax而是使用不同的函数,也许你可以让输出层拥有(num_classes - 1)个单位。

+0

嗨@unaki,谢谢你的回复。二元分类可以用一个输出单元完成,因为P(class 1)= 1 - P(class 0)。但正如你所说,线性依赖关系存在于多个类中。所以理论上你不应该需要'稠密(num_classes)' - 这应该是多余的。 '密集(num_classes - 1)'应该就足够了。为什么不呢? – StatsSorceress

+0

我明白了。在大多数情况下,我们希望对输出层进行归一化,使其总和为1.一个常见函数是softmax。但是,像张量流这样的框架,其softmax函数需要一个大小为(num_classes)的向量。这就是为什么我们必须将维数保留为类的数量。所以总而言之,我们这样做是由于实施约束。 – unaki