pytorch 计算混淆矩阵
创始人
2025-05-28 15:17:22
0

混淆矩阵是评估模型结果的一种指标 用来判断分类模型的好坏

 预测对了 为对角线 

还可以通过矩阵的上下角发现哪些容易出错

从这个 矩阵出发 可以得到 acc != precision recall  特异度?

 

 目标检测01笔记AP mAP recall precision是什么 查全率是什么 查准率是什么 什么是准确率 什么是召回率_:)�东东要拼命的博客-CSDN博客

 acc  是对所有类别来说的

其他三个都是 对于类别来说的

下面给出源码 

import json
import osimport matplotlib.pyplot as plt
import numpy as np
import torch
from prettytable import PrettyTable
from torchvision import datasets
from torchvision.models import MobileNetV2
from torchvision.transforms import transformsclass ConfusionMatrix(object):"""注意版本问题,使用numpy来进行数值计算的"""def __init__(self, num_classes: int, labels: list):self.matrix = np.zeros((num_classes, num_classes))self.num_classes = num_classesself.labels = labelsdef update(self, preds, labels):for p, t in zip(preds, labels):self.matrix[t, p] += 1# 行代表预测标签 列表示真实标签def summary(self):# calculate accuracysum_TP = 0for i in range(self.num_classes):sum_TP += self.matrix[i, i]acc = sum_TP / np.sum(self.matrix)print("acc is", acc)# precision, recall, specificitytable = PrettyTable()table.fields_names = ["", "pre", "recall", "spec"]for i in range(self.num_classes):TP = self.matrix[i, i]FP = np.sum(self.matrix[i, :]) - TPFN = np.sum(self.matrix[:, i]) - TPTN = np.sum(self.matrix) - TP - FP - FNpre = round(TP / (TP + FP), 3)    # round 保留三位小数recall = round(TP / (TP + FN), 3)spec = round(TN / (FP + FN), 3)table.add_row([self.labels[i], pre, recall, spec])print(table)def plot(self):matrix = self.matrixprint(matrix)plt.imshow(matrix, cmap=plt.cm.Blues)  # 颜色变化从白色到蓝色# 设置 x  轴坐标 labelplt.xticks(range(self.num_classes), self.labels, rotation=45)# 将原来的 x 轴的数字替换成我们想要的信息 self.num_classes  x 轴旋转45度# 设置 y  轴坐标 labelplt.yticks(range(self.num_classes), self.labels)# 显示 color bar  可以通过颜色的密度看出数值的分布plt.colorbar()plt.xlabel("true_label")plt.ylabel("Predicted_label")plt.title("ConfusionMatrix")# 在图中标注数量 概率信息thresh = matrix.max() / 2# 设定阈值来设定数值文本的颜色 开始遍历图像的时候一般是图像的左上角for x in range(self.num_classes):for y in range(self.num_classes):# 这里矩阵的行列交换,因为遍历的方向 第y行 第x列info = int(matrix[y, x])plt.text(x, y, info,verticalalignment='center',horizontalalignment='center',color="white" if info > thresh else "black")plt.tight_layout()# 图形显示更加的紧凑plt.show()if __name__ ==' __main__':device = torch.device("cuda:0" if torch.cuda.is_available()else "cpu")print(device)# 使用验证集的预处理方式data_transform = transforms.Compose([transforms.Resize(256),transforms.CenterCrop(224),transforms.ToTensor()transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])])data_loot = os.path.abspath(os.path.join(os.getcwd(), "../.."))# get data root pathimage_path = data_loot + "/data_set/flower_data/"# flower data set pathvalidate_dataset = datasets.ImageFolder(root=image_path +"val",transform=data_transform)batch_size = 16validate_loader = torch.utils.data.DataLoder(validate_dataset,batch_size=batch_size,shuffle=False,num_workers=2)net = MobileNetV2(num_classes=5)#加载预训练的权重model_weight_path = "./MobileNetV2.pth"net.load_state_dict(torch.load(model_weight_path, map_location=device))net.to(device)#read class_indicttry:json_file = open('./class_indicts.json', 'r')class_indict = json.load(json_file)except Exception as e:print(e)exit(-1)labels = [label for _, label in class_indict.item()]# 通过json文件读出来的labelconfusion = ConfusionMatrix(num_classes=5, labels=labels)net.eval()# 启动验证模式# 通过上下文管理器  no_grad  来停止pytorch的变量对梯度的跟踪with torch.no_grad():for val_data in validate_loader:val_images, val_labels = val_dataoutputs = net(val_images.to(device))outputs = torch.softmax(outputs, dim=1)outputs = torch.argmax(outputs, dim=1)# 获取概率最大的元素confusion.update(outputs.numpy(), val_labels.numpy())# 预测值和标签值confusion.plot()# 绘制混淆矩阵confusion.summary()# 来打印各个指标信息

是这样的 这篇算是一个学习笔记,其中的基础图都源于我的导师

 霹雳吧啦Wz的个人空间_哔哩哔哩_bilibili

欢迎无依无靠的CV同学加入 

讲的非常好 代码其实也是导师给的 

我能做的就是读懂每一行加点注释

给不想看视频的同学留点时间

相关内容

热门资讯

安卓手机系统流畅版,极致性能与... 你有没有发现,最近你的安卓手机用起来是不是特别顺滑?没错,就是那种点屏幕就立刻响应的感觉,简直让人爱...
forest安卓系统换到苹果,... 你有没有想过,手机操作系统就像是我们生活中的不同道路,有时候,你可能觉得一条路走得太久了,想要换一条...
华为鸿蒙系统安卓平板,开启智能... 亲爱的读者们,你是否也像我一样,对科技圈的新鲜事儿充满好奇?今天,我要和你聊聊一个最近在科技圈掀起波...
安卓系统藏族软件下载,精选安卓... 安卓系统藏族软件下载:探索藏族文化的数字新篇章在数字化时代,手机已经成为我们生活中不可或缺的一部分。...
显示安卓系统耗电大,深度剖析原... 手机电量总是不够用?是不是觉得安卓系统耗电特别大?别急,今天就来给你揭秘安卓系统耗电的秘密,让你手机...
抽取原装安卓系统驱动,深度挖掘... 你有没有遇到过这种情况?手机里的安卓系统突然卡顿,或者某个应用突然罢工,这时候你是不是想给它来个“大...
安卓系统手机游戏排行,热门游戏... 你有没有发现,最近你的手机里是不是又多了一款游戏?没错,安卓系统手机游戏排行又更新了!今天,就让我带...
安卓系统叫AR 特效,安卓系统... 你知道吗?最近在安卓系统上出现了一个超级酷炫的新功能,它就是AR特效!是不是听起来就让人兴奋不已?那...
安卓系统特有的功能,解锁智能生... 你知道吗?安卓系统这个家伙,简直就是智能手机界的“全能选手”。它不仅拥有丰富的应用市场,还能给你带来...
iqoo 安卓系统王者跳帧,王... 最近有没有发现你的iqoo手机在玩王者荣耀时突然卡顿,画面跳帧,简直让人抓狂啊!别急,今天就来给你揭...
安卓系统平板画图,创意无限的艺... 你有没有想过,用平板画图竟然也能这么有趣呢?尤其是当你手握安卓系统平板的时候,那感觉简直就像拥有了整...
安卓系统韩文变成中文,安卓系统... 你是不是也遇到过这种情况?手机里突然冒出了韩文,而你却一头雾水,完全看不懂?别急,今天就来给你详细解...
国内邮箱注册安卓系统,轻松掌握... 你有没有想过,为什么你的手机里会有那么多邮箱呢?是不是每次注册新账号,都感觉像是在进行一场数字版的“...
苹果系统和安卓系统合作,跨界合... 你知道吗?最近科技圈可是炸开了锅,因为苹果系统和安卓系统竟然要联手合作啦!这可不是闹着玩的,两个在智...
安卓系统怎么篡改位置,轻松伪装... 你有没有想过,手机里的位置信息竟然也能被篡改?没错,就是那个我们平时用来导航、找餐馆、定位好友的安卓...
kindle 刷原生安卓系统,... 亲爱的读者们,你是否也有过这样的经历:拥有一台Kindle,却因为系统不够流畅而感到烦恼?别担心,今...
安卓点歌系统连电脑,打造个性化... 你有没有想过,你的安卓手机里的点歌系统竟然可以和电脑无缝连接呢?这听起来是不是很神奇?没错,今天就要...
那个电视搭载安卓系统,智能娱乐... 你有没有想过,家里的电视竟然也能搭载安卓系统?没错,就是那个曾经只存在于手机和平板电脑上的操作系统,...
安卓系统反黄软件,净化网络环境 你有没有发现,随着智能手机的普及,我们每天的生活越来越离不开这个小小的屏幕了。但是,你知道吗?在这个...
安卓怎么测试系统好坏,安卓系统... 你有没有想过,你的安卓手机是不是真的像你想象中那么强大呢?别急,今天就来给你揭秘,怎么测试安卓系统的...