需要帮助选择损失函数

时间:2019-05-05 11:56:11

标签: machine-learning neural-network deep-learning conv-neural-network loss-function

我已经使用resnet50解决了多类分类问题。该模型输出每个类别的概率。我应该为模型选择哪个损失函数?

选择二元互熵之后: enter image description here

选择分类交叉熵后: enter image description here

以上结果适用于损失函数不同的同一模型,该模型应将图像分为26类,因此分类交叉熵应该适用。 同样,在第一种情况下,精度约为96%,但损耗是如此之高。为什么?

编辑2: 模型架构: enter image description here

enter image description here

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:1)

对于多类分类问题,您使用categorical_crossentropy损失,因为它所做的是使地面真实概率分布与模型预测的损失相匹配。

这正是用于多类别分类的内容,您误以为无法使用此损失。

答案 1 :(得分:1)

您肯定需要使用categorical_crossentropy解决多分类问题。 binary_crossentropy会以一种不清楚的方式将您的问题简化为二进制分类问题,而无需进一步研究。

我要说的是,在第一种情况(在某种程度上第二种情况)中看到高精度的原因是因为您过度拟合。您要添加的第一个密集层包含800万个参数(!!!看到这样做model.summary()),并且您只有70k图像以8个历元来训练它。这种架构选择对计算能力和数据需求都非常苛刻。您还使用了非常基本的优化器(SGD)。尝试使用功能更强大的Adam

最后,我对您选择在输出层中使用'sigmoid'激活功能感到惊讶。为什么不选择更经典的'softmax'