Dense(2) 和 Dense(1) 作为二进制分类 CNN 的最后一层之间的区别?

Difference between Dense(2) and Dense(1) as the final layer of a binary classification CNN?

在用于图像二值分类的 CNN 中,输出的形状应该是(图像数量,1)还是(图像数量,2)?具体来说,这里有两种 CNN 中的最后一层:

keras.layers.Dense(2, activation = 'softmax')(previousLayer)

keras.layers.Dense(1, activation = 'softmax')(previousLayer)

在第一种情况下,对于每个图像都有 2 个输出值(属于第 1 组的概率和属于第 2 组的概率)。第二种情况,每张图片只有1个输出值,就是它的label(0或1,label=1表示属于第1组)。

哪个是正确的?有本质区别吗?我不想识别那些图像中的任何对象,只需将它们分成 2 组。

非常感谢!

第一个是正确的解决方案:

keras.layers.Dense(2, activation = 'softmax')(previousLayer)

通常我们使用softmax激活函数做分类任务,输出的宽度就是类别的个数。这意味着如果你想用标签ABC将一个对象分为三类,你需要让Dense层生成一个输出形状为 (None, 3)。然后可以使用cross_entropyloss函数计算LOSS,自动计算梯度,做反向传播过程。

如果你只想用 Dense 层生成一个值,这意味着你得到一个形状为 (None, 1) 的张量 - 所以它会生成一个单一的数值,如 regression 任务。您正在使用输出值来表示类别。答案是正确的,但不像 classification 任务的一般解决方案那样执行。

不同之处在于 class 概率是否相互独立(多标签 class化)。

当有 2 个 class 并且你通常有 P(c=1) + P(c=0) = 1 那么

keras.layers.Dense(2, activation = 'softmax') 

keras.layers.Dense(1, activation = 'sigmoid')

两者的 class 概率都是正确的。唯一的区别是您在训练期间如何提供标签。但是

keras.layers.Dense(2, activation = 'sigmoid')

在这种情况下是不正确的。但是,如果您有 P(c=1) + P(c=0) != 1,这是正确的实现。这是多标签 classification 的情况,其中一个实例可能属于多个正确的 class.