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

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


要么

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


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

哪一个是正确的?有内在的区别吗?我不想识别这些图像中的任何对象,只需将它们分为2组即可。

非常感谢!

最佳答案

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

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


通常,我们使用softmax激活函数执行分类任务,并且输出宽度将为类别的数量。这意味着,如果要使用标签ABC将一个对象分为三类,则需要使Dense层生成形状为(None, 3)的输出。然后,您可以使用cross_entropy损耗函数来计算LOSS,自动计算梯度并执行反向传播过程。

如果只想在Dense层上生成一个值,则意味着您会得到形状为(None, 1)的张量-因此它会生成单个数值,如regression任务。您正在使用输出的值来表示类别。答案是正确的,但其表现不如classification任务的一般解决方案。

关于tensorflow - Dense(2)和Dense(1)之间的区别是二进制分类CNN的最后一层?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50808593/

10-12 23:14