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

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

设置设备

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')  开始直接缩进!!!
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])

最后

Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

👉Python所有方向的学习路线👈

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

👉Python必备开发工具👈

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

👉Python全套学习视频👈

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

👉实战案例👈

学python就与学数学一样,是不能只看书不做题的,直接看步骤和答案会让人误以为自己全都掌握了,但是碰到生题的时候还是会一筹莫展。

因此在学习python的过程中一定要记得多动手写代码,教程只需要看一两遍即可。

👉大厂面试真题👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。


相关文章
|
6月前
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
553 1
|
8月前
|
机器学习/深度学习 数据采集 数据挖掘
基于 GARCH -LSTM 模型的混合方法进行时间序列预测研究(Python代码实现)
基于 GARCH -LSTM 模型的混合方法进行时间序列预测研究(Python代码实现)
289 2
|
7月前
|
机器学习/深度学习 编解码 数据可视化
【能量算子】评估 EEG 中的瞬时能量:非负、频率加权能量算子(Python&Matlab代码实现)
【能量算子】评估 EEG 中的瞬时能量:非负、频率加权能量算子(Python&Matlab代码实现)
128 6
|
7月前
|
机器学习/深度学习 数据采集 并行计算
多步预测系列 | LSTM、CNN、Transformer、TCN、串行、并行模型集合研究(Python代码实现)
多步预测系列 | LSTM、CNN、Transformer、TCN、串行、并行模型集合研究(Python代码实现)
830 2
|
10月前
|
存储 机器学习/深度学习 人工智能
稀疏矩阵存储模型比较与在Python中的实现方法探讨
本文探讨了稀疏矩阵的压缩存储模型及其在Python中的实现方法,涵盖COO、CSR、CSC等常见格式。通过`scipy.sparse`等工具,分析了稀疏矩阵在高效运算中的应用,如矩阵乘法和图结构分析。文章还结合实际场景(推荐系统、自然语言处理等),提供了优化建议及性能评估,并展望了稀疏计算与AI硬件协同的未来趋势。掌握稀疏矩阵技术,可显著提升大规模数据处理效率,为工程实践带来重要价值。
494 58
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python实现基于矩阵分解的长期事件(MFLEs)时间序列分析
在现代数据分析中,高维时间序列数据的处理和预测极具挑战性。基于矩阵分解的长期事件(MFLEs)分析技术应运而生,通过降维和时间序列特性结合,有效应对大规模数据。MFLE利用矩阵分解提取潜在特征,降低计算复杂度,过滤噪声,并发现主要模式。相比传统方法如ARIMA和深度学习模型如LSTM,MFLE在多变量处理、计算效率和可解释性上更具优势。通过合理应用MFLE,可在物联网、金融等领域获得良好分析效果。
475 0
使用Python实现基于矩阵分解的长期事件(MFLEs)时间序列分析
|
7月前
|
算法 安全 新能源
基于DistFlow的含分布式电源配电网优化模型【IEEE39节点】(Python代码实现)
基于DistFlow的含分布式电源配电网优化模型【IEEE39节点】(Python代码实现)
600 0
|
10月前
|
机器学习/深度学习 人工智能 PyTorch
200行python代码实现从Bigram模型到LLM
本文从零基础出发,逐步实现了一个类似GPT的Transformer模型。首先通过Bigram模型生成诗词,接着加入Positional Encoding实现位置信息编码,再引入Single Head Self-Attention机制计算token间的关系,并扩展到Multi-Head Self-Attention以增强表现力。随后添加FeedForward、Block结构、残差连接(Residual Connection)、投影(Projection)、层归一化(Layer Normalization)及Dropout等组件,最终调整超参数完成一个6层、6头、384维度的“0.0155B”模型
564 11
200行python代码实现从Bigram模型到LLM
|
8月前
|
机器学习/深度学习 算法 调度
【切负荷】计及切负荷和直流潮流(DC-OPF)风-火-储经济调度模型研究【IEEE24节点】(Python代码实现)
【切负荷】计及切负荷和直流潮流(DC-OPF)风-火-储经济调度模型研究【IEEE24节点】(Python代码实现)
381 0
|
11月前
|
机器学习/深度学习 人工智能 算法
Python+YOLO v8 实战:手把手教你打造专属 AI 视觉目标检测模型
本文介绍了如何使用 Python 和 YOLO v8 开发专属的 AI 视觉目标检测模型。首先讲解了 YOLO 的基本概念及其高效精准的特点,接着详细说明了环境搭建步骤,包括安装 Python、PyCharm 和 Ultralytics 库。随后引导读者加载预训练模型进行图片验证,并准备数据集以训练自定义模型。最后,展示了如何验证训练好的模型并提供示例代码。通过本文,你将学会从零开始打造自己的目标检测系统,满足实际场景需求。
11643 1
Python+YOLO v8 实战:手把手教你打造专属 AI 视觉目标检测模型