图像分类模型评估之用python绘制混淆矩阵confusion_matrix

这篇具有很好参考价值的文章主要介绍了图像分类模型评估之用python绘制混淆矩阵confusion_matrix。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

训练完成后,生成混淆矩阵!!!!

ImageNet数据格式,生成混淆矩阵!!!!

非 ImageNet数据格式,定义导入数据的类名和方法!!!!

非imageNet数据格式,完成生成混淆矩阵程序代码!!!!


混淆矩阵:是用于评估分类模型性能的一种常用工具,可以用于计算分类准确率、精确率、召回率和F1-score等指标。生成混淆矩阵需要将模型对测试集的预测结果与真实标签进行比对,然后统计每个类别被正确预测的数量以及被错误预测的数量,最终将这些数据组织成矩阵的形式。

python实现混淆矩阵代码:

训练完成后,生成混淆矩阵!!!!

ImageNet数据格式,生成混淆矩阵!!!!

其中,data_path是数据集路径,model_path是模型路径,需要根据实际情况进行修改。代码中使用了ImageFolder直接导入数据集,不需要重新定义类。导入时,将数据集根目录和数据增强方法传入ImageFolder中即可。最后,生成混淆矩阵并保存为CSV文件。

import torch
import torchvision.datasets as datasets
import torchvision.transforms as transforms
from sklearn.metrics import confusion_matrix
import pandas as pd

# 设置设备
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

# 定义数据增强
transform = transforms.Compose([
    transforms.Resize((224, 224)),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])

# 加载数据集
data_path = "path/to/dataset"
dataset = datasets.ImageFolder(root=data_path, transform=transform)

# 加载模型
model_path = "path/to/model.pth"
model = torch.load(model_path)
model.to(device)
model.eval()

# 获取预测结果和标签
labels = []
preds = []
for inputs, targets in dataset:
    inputs = inputs.unsqueeze(0).to(device)
    targets = targets.to(device)
    outputs = model(inputs)
    _, predicted = torch.max(outputs.data, 1)
    labels.append(targets.item())
    preds.append(predicted.item())

# 生成混淆矩阵
cm = confusion_matrix(labels, preds)
classes = dataset.classes
cm_df = pd.DataFrame(cm, index=classes, columns=classes)

# 保存为CSV文件
cm_df.to_csv("confusion_matrix.csv")
print("Confusion matrix saved as confusion_matrix.csv")

非 ImageNet数据格式,定义导入数据的类名和方法!!!!

导入数据的类和函数定义代码:

import os
import numpy as np
import torch
from torch.utils.data import Dataset
from torchvision import transforms
from PIL import Image

class CustomDataset(Dataset):
    def __init__(self, data_dir, transform=None):
        self.data_dir = data_dir
        self.transform = transform
        self.img_files = os.listdir(data_dir)

    def __len__(self):
        return len(self.img_files)

    def __getitem__(self, index):
        img_path = os.path.join(self.data_dir, self.img_files[index])
        img = Image.open(img_path).convert('RGB')
        label = self.get_label_from_filename(self.img_files[index])
        
        if self.transform:
            img = self.transform(img)

        return img, label

    def get_label_from_filename(self, filename):
        label = filename.split('.')[0] # 假设文件名为"label.image_id.jpg"格式
        label = label.split('_')[0] # 仅保留label信息
        return int(label)

# 加载数据集并进行预处理
data_dir = "your_data_dir"
transform = transforms.Compose([
    transforms.Resize((224, 224)), # 图像大小调整为224x224
    transforms.ToTensor(), # 将图像转换为Tensor格式,并将像素值缩放到[0, 1]
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) # 图像标准化
])
dataset = CustomDataset(data_dir, transform=transform)

非imageNet数据格式,完成生成混淆矩阵程序代码!!!!

注意点:

1.自定义数据通过 “_” 来进行获取图片的类别 label 标签值,所以你的命名中是否包含了标签值,如果没有标签值,还是需要自行修改的,当然有的话,也需要思考一下,标签值放置的位置在spilt后列表的那个位置!

2.对了,那个后面部分需要缩进,哈哈,python代码简洁,但缩进问题就很抽象,从

model = torch.load('model.pth')  开始直接缩进!!!文章来源地址https://www.toymoban.com/news/detail-430016.html

import torch
import torchvision.transforms as transforms
from torch.utils.data import DataLoader
from sklearn.metrics import confusion_matrix
import pandas as pd
import numpy as np


# 自定义数据集类
class MyDataset(torch.utils.data.Dataset):
    def __init__(self, root_dir, transform=None):
        self.root_dir = root_dir
        self.transform = transform
        self.img_list = os.listdir(root_dir)

    def __len__(self):
        return len(self.img_list)

    def __getitem__(self, idx):
        img_name = os.path.join(self.root_dir, self.img_list[idx])
        image = Image.open(img_name).convert('RGB')
        if self.transform:
            image = self.transform(image)
        label = int(self.img_list[idx].split('_')[0])  # 根据文件名获取标签
        return image, label

 # 加载模型
model = torch.load('model.pth')

# 定义数据集
transform = transforms.Compose([
    transforms.Resize((224, 224)),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5])
])
dataset = MyDataset(root='path/to/dataset', transform=transform)
dataloader = DataLoader(dataset, batch_size=16, shuffle=False)

# 预测结果和真实标签
y_pred = []
y_true = []
with torch.no_grad():
    for images, labels in dataloader:
        outputs = model(images)
        _, predicted = torch.max(outputs.data, 1)
        y_pred.extend(predicted.cpu().numpy())
        y_true.extend(labels.cpu().numpy())

# 生成混淆矩阵
cm = confusion_matrix(y_true, y_pred)

# 将混淆矩阵保存为CSV文件
pd.DataFrame(cm).to_csv('confusion_matrix.csv', index=False, header=False)

# 打印混淆矩阵
print(cm)

到了这里,关于图像分类模型评估之用python绘制混淆矩阵confusion_matrix的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【超详细】机器学习sklearn之分类模型评估 混淆矩阵、ROC曲线、召回率与精度、F1分数

    【超详细】机器学习sklearn之分类模型评估 混淆矩阵、ROC曲线、召回率与精度、F1分数

    机器学习之分类模型的评估 学习分类模型评估的方法: 1、混淆矩阵 2、分类结果汇总 3、ROC曲线 4、召回率与精度 5、F1分数 一、评估分类器性能的度量 1、真正(true positive, TP)或f++,对应的是被分类模型正确预测的正样本数。 2、假负(false negative, FN)或f±对应的是被分类模型错

    2023年04月08日
    浏览(12)
  • 论文图片绘制 Python绘制多分类混淆矩阵及可视化(颜色随正确率渐变)

    论文图片绘制 Python绘制多分类混淆矩阵及可视化(颜色随正确率渐变)

    需求 论文中对多分类评价需要 混淆矩阵已获得,需要可视化 给出数据 混淆矩阵的定义以及如何读图不再描述,这里仅给出绘制方法 给出数据:8分类任务 实验代码 给出所需的包 numpy和matplotlib 定义分类标签 这里可以修改为自己所需的标签以及分类任务,如二分类只需要 两

    2024年02月12日
    浏览(26)
  • 详细讲解分类模型评价指标(混淆矩阵)python示例

    详细讲解分类模型评价指标(混淆矩阵)python示例

    对于回归模型的评估方法,通常会采用平均绝对误差(MAE)、均方误差(MSE)、平均绝对百分比误差(MAPE)等方法。 对于聚类模型的评估方法,较为常见的一种方法为轮廓系数(Silhouette Coefficient ),该方法从内聚度和分离度两个方面入手,用以评价相同数据基础上不同聚类

    2024年02月06日
    浏览(9)
  • 混淆矩阵、精确率、召回率和F1值:如何评估分类器的性能?

    混淆矩阵、精确率、召回率和F1值:如何评估分类器的性能?

    ❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博相关......)👈 (封面图由文心一格生成) 在机器学习中,分类是一项非常重要的任务。在

    2024年02月02日
    浏览(13)
  • 深度学习之卷积神经网络中常用模型评估指标(混淆矩阵,精确率,召回率,特异度计算方法)——python代码

    深度学习之卷积神经网络中常用模型评估指标(混淆矩阵,精确率,召回率,特异度计算方法)——python代码

    深度学习之卷积神经网络中常用模型评估指标(混淆矩阵,精确率,召回率,特异度计算方法): 混淆矩阵,精确率,召回率,特异度作为卷积神经网络的模型性能评价指标,它们的计算和绘制具有非常重要的意义,特别是在写论文的时候,我们往往需要这些指标来证明我们模

    2024年02月06日
    浏览(12)
  • 成为AI产品经理——模型评估(混淆矩阵)

    成为AI产品经理——模型评估(混淆矩阵)

    混淆矩阵有两个定义 positive(正例) 和 negative(反例) 。分别代表模型结果的好和坏。 下图就是一个分类问题的混淆矩阵。横行代表真实的情况,而竖行代表预测的结果。 为了便于理解,我在这里举一个分出瓜的好坏的分类问题。 TP: True Positive,真正例。表示这个瓜实际

    2024年02月03日
    浏览(11)
  • 分类模型之混淆矩阵(Confusion Matrix)

    分类模型之混淆矩阵(Confusion Matrix)

    混淆矩阵是ROC曲线绘制的基础,同时它也是衡量分类型模型准确度中最基本,最直观,计算最简单的方法。 可以简单理解为:将一个分类模型的预测结果与正确结果做对比,将预测正确的统计量和预测错误的统计量分别写入一张矩阵图中,得到的这张图就是混淆矩阵了。 混

    2024年02月03日
    浏览(11)
  • 利用python绘制混淆矩阵

    利用python绘制混淆矩阵

    利用python绘制混淆矩阵,直接附代码。 简单理解混淆矩阵的元素含义,例如下面第一行第二个的“3”表示实际标签为类别0的预测成类别1的有3个样本。 附效果图: 如果需要切换不同的颜色,如:

    2024年02月16日
    浏览(12)
  • 绘制混淆矩阵(MatLab/Python)

    绘制混淆矩阵(MatLab/Python)

    本文主要简单介绍如何绘制混淆矩阵       首先混淆矩阵是机器学习中总结分类模型预测结果的情形分析表,以矩阵形式将数据集中的记录按照真实的类别与分类模型预测的类别判断两个标准进行汇总。         其实混淆矩阵就是用来判断我们的算法的分类准确度的一个可

    2024年02月08日
    浏览(10)
  • 【论文必用】Python绘制混淆矩阵

    【论文必用】Python绘制混淆矩阵

      混淆矩阵的每一列代表了预测类别, 每一列的总数表示预测为该类别的数据的数目 ;每一行代表了数据的真实归属类别, 每一行的数据总数表示该类别的数据实例的数目 。每一列中的数值表示真实数据被预测为该类的数目。   以下图为例,第一行的数值总和为2+0+

    2023年04月24日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包