我已经使用resnet50解决了多类分类问题。该模型输出每个类别的概率。我应该为模型选择哪个损失函数?
以上结果适用于损失函数不同的同一模型,该模型应将图像分为26类,因此分类交叉熵应该适用。 同样,在第一种情况下,精度约为96%,但损耗是如此之高。为什么?
答案 0 :(得分:1)
对于多类分类问题,您使用categorical_crossentropy
损失,因为它所做的是使地面真实概率分布与模型预测的损失相匹配。
这正是用于多类别分类的内容,您误以为无法使用此损失。
答案 1 :(得分:1)
您肯定需要使用categorical_crossentropy
解决多分类问题。 binary_crossentropy
会以一种不清楚的方式将您的问题简化为二进制分类问题,而无需进一步研究。
我要说的是,在第一种情况(在某种程度上第二种情况)中看到高精度的原因是因为您过度拟合。您要添加的第一个密集层包含800万个参数(!!!看到这样做model.summary()
),并且您只有70k图像以8个历元来训练它。这种架构选择对计算能力和数据需求都非常苛刻。您还使用了非常基本的优化器(SGD
)。尝试使用功能更强大的Adam
。
最后,我对您选择在输出层中使用'sigmoid'
激活功能感到惊讶。为什么不选择更经典的'softmax'
?