准确性好,但预测错误



我已经用非常好的val_accuracy训练了一个模型,但预测是完全错误的。不幸的是,类似问题的答案对我没有帮助。我的网络存在多标签问题。最终结果是预测相册中每张图片的 3 个最佳标签。

这是我的函数,它使用预测进行输出。

def recognition(path):
class = np.array(classes)
for picture in os.listdir(path):
pic = os.path.join(path, picture)
pic = image.load_img(pic, size)
pic = image.img_to_array(pic)
pic = pic/255

这是我的CNN:

model = models.Sequential()
model.add(pretrained)
model.add(layers.Dropout(0.3))
model.add(layers.Flatten())
model.add(layers.Dropout(0.3))
model.add(layers.Dense(256, activation = 'relu'))
model.add(layers.Dropout(0.3))
model.add(layers.Dense(7, activation = 'sigmoid'))

val_acc在0.9527。

对于多标签问题,我认为准确性不是一个很好的指标。尝试精确和召回。Keras 函数模型提供高验证准确性,但预测不正确 此讨论可能对您有用。

我认为 sigmoid 没有任何问题(前提是这是一个多标签任务(。我建议您查看数据,尝试理解正在发生的事情。也许您的数据集与现实世界的数据完全不同(查看协变量偏移(。只要确保没有将任何信息泄漏到验证集中即可。如果问题与数据相关,则没有简单的方法来调试正在发生的事情。

请注意,accuracy可能具有欺骗性。一种情况是当数据imbalanced时。假设总共有 600 个样本,其中 550 个属于正类,只有 50 个属于负类。由于大多数样本属于一个类,因此该类的精度将高于另一个类。 如果模型对正类总共进行了 530/550 次正确预测,而负类只有 5/50,则总准确度为 (530 + 5(/600 = 0.8917。这意味着该模型的准确率为 89.17%。考虑到这一点,您可能会认为对于任何样本(无论其类别如何(,模型在 89.17% 的时间内都可能做出正确的预测。这是无效的,尤其是当您考虑模型表现不佳的负类时。

precision计算为正确分类的阳性样本数与分类样本总数之间的比率。 一个被别人信任的人;当他预测某事时,别人就会相信他。精度就像这个人。当精度较高时,当模型预测样本为"正"时,您可以信任该模型。因此,当模型说样本为阳性时,精度有助于了解模型的准确性。

参考:评估深度学习模型

最新更新