Bub*_*ubo 8 classification deep-learning keras tensorflow convolutional-neural-network
在用于图像的二进制分类的CNN中,输出的形状应该是(图像数量1)还是(图像数量2)?具体来说,这是CNN中的2种最后一层:
keras.layers.Dense(2, activation = 'softmax')(previousLayer)
Run Code Online (Sandbox Code Playgroud)
要么
keras.layers.Dense(1, activation = 'softmax')(previousLayer)
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,每个图像都有2个输出值(属于组1的概率和属于组2的概率)。在第二种情况下,每个图像只有1个输出值,即它的标签(0或1,label = 1表示它属于组1)。
哪一个是正确的?有内在的区别吗?我不想识别这些图像中的任何对象,只需将它们分为2组即可。
非常感谢!
区别在于类概率是否相互独立(多标签分类)。
当有 2 个班级并且您通常P(c=1) + P(c=0) = 1有时
keras.layers.Dense(2, activation = 'softmax')
keras.layers.Dense(1, activation = 'sigmoid')
Run Code Online (Sandbox Code Playgroud)
就类别概率而言,两者都是正确的。唯一的区别是您在训练期间如何提供标签。但
keras.layers.Dense(2, activation = 'sigmoid')
Run Code Online (Sandbox Code Playgroud)
在这种情况下是不正确的。但是,如果您有P(c=1) + P(c=0) != 1. 这是多标签分类的情况,其中一个实例可能属于多个正确的类别。
第一个是正确的解决方案:
keras.layers.Dense(2, activation = 'softmax')(previousLayer)
Run Code Online (Sandbox Code Playgroud)
通常,我们使用softmax激活函数执行分类任务,输出宽度将为类别的数量。这意味着,如果你想一个对象分为三类有标签A,B或者C,你需要使Dense层生成的形状输出(None, 3)。然后,您可以使用cross_entropy损失函数计算LOSS,自动计算梯度,然后执行反向传播过程。
如果只想在Dense图层上生成一个值,则意味着您将获得形状为(None, 1)- 的张量,因此它会生成单个数值,例如regression任务。您正在使用输出的值来表示类别。答案是正确的,但其执行效果不像classification任务的一般解决方案。
| 归档时间: |
|
| 查看次数: |
2415 次 |
| 最近记录: |