首页 > 解决方案 > 在二进制分类的情况下,最后一个密集层中的单元数

问题描述

我的问题与此处有关。我正在使用猫和狗数据集。所以只有这两种结果。我找到了两个实现。一个用途:

tf.keras.layers.Dense(1)

作为模型中的最后一层第二个实现使用:

layers.Dense(2)

现在,我不明白这一点。这里什么是正确的?是否相同以及为什么(我不明白为什么应该相同)。或者这里有什么区别?第一个解决方案是为猫或狗建模,第二个解决方案是为猫、狗或其他任何人建模?如果我们只有猫和狗,为什么要这样做?我应该采取哪种解决方案?

标签: tensorflowkeras

解决方案


两者都是正确的。一种是使用二元分类,另一种是使用分类分类。让我们试着找出不同之处。

二元分类:在这种情况下,输出层只有一个神经元。从这个单一的神经元输出中,你必须决定它是猫还是狗。您可以设置任何阈值级别来对输出进行分类。假设猫被标记为 0,狗被标记为 1,您的阈值为 0.5。因此,如果输出大于 0.5,那么它就是一只狗,因为它更接近 1,否则它就是一只猫。在这种情况下,大多数情况下都使用 binary_crossentropy。

分类分类:输出层数与类数完全相同。这次您不能将数据标记为 0 或 1。标签形状应与输出层相同。在您的情况下,您的输出层有两个神经元(用于类)。您必须以相同的方式标记数据。为此,您必须对标签数据进行编码。我们称之为“one-hot-encode”。例如,猫将被编码为 (1,0),狗将被编码为 (0,1)。现在您的预测将有两个浮点数。如果第一个数字大于第二个数字,则为猫,否则为狗。我们将这个数字称为置信度分数。假设对于测试图像,您的模型预测为 (0.70, 0.30)。这意味着您的模型有 70% 的信心认为它是猫,有 30% 的信心认为它是猫 萨狗。请注意,输出层的值完全取决于您的层的激活。要深入了解,请阅读激活函数。


推荐阅读