gpt4 book ai didi

python - 在keras中生成多类分类的混淆矩阵

转载 作者:行者123 更新时间:2023-12-03 08:57:41 25 4
gpt4 key购买 nike

通过训练模型获得高达 98% 的准确率,但混淆矩阵显示出非常高的分类错误。

我正在使用 keras 和迁移学习方法在预训练的 VGG16 模型上进行多类分类。

问题是使用 CNN 将图像分类为 5 种番茄病害。

有 5 个疾病类别,有 6970 个训练图像和 70 个测试图像。

训练模型的准确度为 98.65%,而测试的准确度为 94%。

但问题是,当我生成混淆矩阵时,它显示出非常高的错误分类。

请大家帮帮我,是我的代码错误还是模型错误?我很困惑我的模型是否给出了正确的结果。

如果有人可以向我解释 keras 如何使用 model.fit_generator 函数实际计算准确度,因为在混淆矩阵上应用准确度的一般公式并不会给出与 keras 计算的结果相同的结果。

用于测试数据集的代码是:

test_generator = test_datagen.flow_from_directory(
test_dir,
target_size=(150, 150),
batch_size=20,
class_mode='categorical')
test_loss, test_acc = model.evaluate_generator(test_generator, steps=50)
print('test acc:', test_acc)

我从一个论坛找到了生成混淆矩阵的代码;

代码是:

import numpy as np
from sklearn.metrics import confusion_matrix,classification_report
batch_size = 20
num_of_test_samples = 70
predictions = model.predict_generator(test_generator, num_of_test_samples // batch_size+1)

y_pred = np.argmax(predictions, axis=1)

true_classes = test_generator.classes

class_labels = list(test_generator.class_indices.keys())

print(class_labels)

print(confusion_matrix(test_generator.classes, y_pred))

report = classification_report(true_classes, y_pred, target_names=class_labels)
print(report)

以下是我得到的结果:

测试准确度:

Found 70 images belonging to 5 classes.
test acc: 0.9420454461466182

混淆矩阵结果:

['TEB', 'TH', 'TLB', 'TLM', 'TSL']
[[2 3 2 4 3]
[4 2 3 0 5]
[3 3 3 2 3]
[3 3 2 4 2]
[2 2 4 4 2]]]
precision recall f1-score support

TEB 0.14 0.14 0.14 14
TH 0.15 0.14 0.15 14
TLB 0.21 0.21 0.21 14
TLM 0.29 0.29 0.29 14
TSL 0.13 0.14 0.14 14

micro avg 0.19 0.19 0.19 70
macro avg 0.19 0.19 0.19 70
weighted avg 0.19 0.19 0.19 70

最佳答案

创建测试数据生成器时,flow_from_directory 方法默认采用 shuffle=True 参数。因此,当您通过插入生成器实例进行预测时,预测的显示顺序与真实类的顺序不同。这就是您获得正确预测的原因,但顺序不同。因此,混淆矩阵表现不佳。

只需在测试数据生成器中将 shuffle 设置为 False,预测就会按正确的顺序出现。由于验证/测试数据的目的是评估模型,因此您几乎总是可以将 shuffle 设置为 False。

关于python - 在keras中生成多类分类的混淆矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53929819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com