需要帮助选择损失函数
Need help choosing loss function
我已经使用 resnet50 解决了一个多 class class 化问题。该模型输出每个 class 的概率。我应该为我的模型选择哪种损失函数?
选择二元交叉熵后:
选择分类交叉熵后:
以上结果是针对具有不同损失的同一模型得出的 functions.This 模型应该 class 将图像分成 26 classes 所以分类交叉熵应该起作用。
此外,在第一种情况下,准确率约为 96%,但损失非常高。为什么?
编辑 2:
模型架构:
对于多 class class 化问题,您使用 categorical_crossentropy
损失,因为它所做的是将真实概率分布与模型预测的概率分布相匹配。
这正是multi-classclass化所用的,你误以为你不能用这个loss
您肯定需要使用 categorical_crossentropy
来解决多分类问题。 binary_crossentropy
将以一种不进一步研究就不清楚的方式将您的问题简化为二进制分类问题。
我会说你在第一种情况(在某种程度上是第二种)中看到高精度的原因是你过度拟合了。您要添加的第一个密集层包含 800 万个参数(!!!看到 model.summary()
),而您只有 70k 个图像来用 8 个 epoch 训练它。这种架构选择对计算能力和数据要求都非常苛刻。您还使用了一个非常基本的优化器 (SGD
)。尝试使用更强大的Adam
.
最后,我有点惊讶你选择在输出层采取'sigmoid'
激活函数。为什么不是更经典的'softmax'
?
我已经使用 resnet50 解决了一个多 class class 化问题。该模型输出每个 class 的概率。我应该为我的模型选择哪种损失函数?
选择二元交叉熵后:
选择分类交叉熵后:
以上结果是针对具有不同损失的同一模型得出的 functions.This 模型应该 class 将图像分成 26 classes 所以分类交叉熵应该起作用。 此外,在第一种情况下,准确率约为 96%,但损失非常高。为什么?
编辑 2:
模型架构:
对于多 class class 化问题,您使用 categorical_crossentropy
损失,因为它所做的是将真实概率分布与模型预测的概率分布相匹配。
这正是multi-classclass化所用的,你误以为你不能用这个loss
您肯定需要使用 categorical_crossentropy
来解决多分类问题。 binary_crossentropy
将以一种不进一步研究就不清楚的方式将您的问题简化为二进制分类问题。
我会说你在第一种情况(在某种程度上是第二种)中看到高精度的原因是你过度拟合了。您要添加的第一个密集层包含 800 万个参数(!!!看到 model.summary()
),而您只有 70k 个图像来用 8 个 epoch 训练它。这种架构选择对计算能力和数据要求都非常苛刻。您还使用了一个非常基本的优化器 (SGD
)。尝试使用更强大的Adam
.
最后,我有点惊讶你选择在输出层采取'sigmoid'
激活函数。为什么不是更经典的'softmax'
?