大家经常在评论区问我如果学习Python,如何锻炼 自己的Python编程能力,这里给大家推荐一个我经常练习Python的网站:牛客网 - 找工作神器|笔试题库|面试经验|实习招聘内推,求职就业一站解决_牛客网

 里面还包含很多大厂笔试的Python题目,大家可以跟我一起刷题,从本周起我会陆续在博客分享我的刷题心得,欢迎大家跟我一起学习,有问题可以在评论区指出来,大家一起讨论。

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

混淆矩阵,精确率,召回率,特异度作为卷积神经网络的模型性能评价指标,它们的计算和绘制具有非常重要的意义,特别是在写论文的时候,我们往往需要这些指标来证明我们模型的优异性,这里给出相应的代码方便大家计算和绘制自己的混淆矩阵和计算各种指标。我这里是使用的网上开源的玉米病害数据集。下面给我的整个项目工程的数据集代码链接,你替换成你的数据集,模型结构代码即可。​​​​​​​

首先是文件夹摆放方式:

num_classes.json为写自己数据种类的文件:

按照这样写入自己的数据种类名称即可,如果种类比这多或者少,相应删减即可

data文件夹下放置自己用来绘制混淆矩阵的数据集,数据集每一类文件夹的名称为这类数据集种类的名称即可:

 lenet.pth为自己训练的模型权重,这里将这个换成你自己的模型权重即可。

main.py为绘制混淆矩阵和计算其他指标的代码,我们需要注意一下这里,修改成自己的模型类的名称。

from model import lenet
#自己模型类的名字叫啥,这个lenet就改成啥,
#举例,如果是alexnet,就改成from model import alexnet
#模型代码放入model.py文件中

自己模型类的名称,自行查看class后面,我这里是lenet

 main.py

import json
import torch
import matplotlib.pyplot as plt
from torchvision import transforms, datasets
import numpy as np
from tqdm import tqdm
from prettytable import PrettyTablefrom model import lenet
#自己模型类的名字叫啥,这个lenet就改成啥,
#举例,如果是alexnet,就改成from model import alexnet
#模型代码放入model.py文件中class Confusion_Matrix(object):def __init__(self , labels: list):self.num_classes = len(labels)self.matrix = np.zeros((len(labels), len(labels)))self.labels = labelsdef Matrix_update(self, preds, labels):for i, j in zip(preds, labels):self.matrix[i, j] += 1def Matrix_summary(self):sum_TP = 0for i in range(self.num_classes):sum_TP += self.matrix[i, i]accuracy = sum_TP / np.sum(self.matrix)# "精确率", "召回率", "特异度"table = PrettyTable()table.field_names = ["num_classes", "Precision", "Recall", "Specificity"]#num_classes 数据种类名称、Precision 精确率、Recall 召回率、Specificity 特异度avaerage_Precision = []avaerage_Recall = []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 - FNPrecision = round(TP / (TP + FP), 3) if TP + FP != 0 else 0.avaerage_Precision.append(Precision)Recall = round(TP / (TP + FN), 3) if TP + FN != 0 else 0.avaerage_Recall.append(Recall)Specificity = round(TN / (TN + FP), 3) if TN + FP != 0 else 0.table.add_row([self.labels[i], Precision, Recall, Specificity])print(table)print("模型全部种类的总体识别率: ",  accuracy)print('平均精确率: ' , sum(avaerage_Precision)/self.num_classes)print('平均召回率: ', sum(avaerage_Recall) / self.num_classes)def Matrix_plot(self):matrix = self.matrixplt.imshow(matrix, cmap=plt.cm.Reds)plt.xticks(range(self.num_classes), self.labels, rotation=45)plt.yticks(range(self.num_classes), self.labels)plt.colorbar()plt.xlabel('真实类别')plt.ylabel('预测类别')plt.title('混淆矩阵')plt.rcParams['font.sans-serif'] = ['SimHei']#设置汉语显示plt.rcParams['axes.unicode_minus'] = False# 在图中标注数量/概率信息thresh = matrix.max() / 2for x in range(self.num_classes):for y in range(self.num_classes):fin_matrix = int(matrix[y, x])plt.text(x, y, fin_matrix,verticalalignment='center',horizontalalignment='center',color="white" if fin_matrix > thresh else "black")plt.tight_layout()plt.savefig('./混淆矩阵.jpg')#保存图片到当前文件夹路径下,图片格式为jpg,也可以修改成其他格式,例如png等,根据需要自行修改即可plt.show()device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")#gpu CUDA的使用情况
print(device)data_transform = transforms.Compose([transforms.Resize((120, 120)),  #这里的预习处理方式最好跟你训练代码里面验证集的预处理方式保持一致,这样可以保证结果的准确性transforms.ToTensor(),      #这里务必写成跟原数据验证集的图片预处理方式transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])image_root =  "./data"  # 画混淆矩阵图片数据路径,相对路径,绝对路径均可填写。不会填写的就放置到当前文件夹下的data文件中即可val_data = datasets.ImageFolder(root = image_root , transform=data_transform)val_loader = torch.utils.data.DataLoader(val_data , batch_size = 16 , shuffle=False , num_workers=0)net = lenet()#这里改成直接的模型类的名字model_path = "lenet.pth"#这里写自己训练好模型的路径,直接放到当前文件夹下即可net.load_state_dict(torch.load(model_path, map_location = device))#读取自己的模型
net.to(device)num_classes_path = './num_classes.json'#读取种类名称放置文件内数据种类的名称json_file = open(num_classes_path, 'r',encoding='UTF-8')
class_indict = json.load(json_file,encoding='UTF-8')nums_class = list(class_indict.keys())
nums_class.sort()labels = [class_indict[i] for i in nums_class]
print('数据种类名称:' ,labels)confusion = Confusion_Matrix(labels)
net.eval()
with torch.no_grad():for val in tqdm(val_loader):val_images, val_labels = valoutputs = net(val_images.to(device))outputs = torch.argmax(outputs, dim=1)confusion.Matrix_update(outputs.to("cpu").numpy(), val_labels.to("cpu").numpy())
confusion.Matrix_summary()
confusion.Matrix_plot()

model.py用来放置自己模型结构的代码,这里千万要换成自己模型结构的代码

from torch import nn#自己模型结构的代码就放到这里,缺什么库就导入什么库
class lenet(nn.Module):def __init__(self):super(lenet, self).__init__()self.model = nn.Sequential(nn.Conv2d(3, 16, kernel_size=5),  # input[3, 120, 120]  output[48, 55, 55]nn.ReLU(inplace=True),nn.MaxPool2d(kernel_size=2, stride=2),  # output[48, 27, 27]nn.Conv2d(16, 32, kernel_size=5),  # output[128, 27, 27]nn.ReLU(inplace=True),nn.MaxPool2d(kernel_size=2, stride=2),  # output[128, 13, 13]nn.Flatten(),nn.Linear(23328, 2048),nn.Linear(2048, 2048),nn.Linear(2048, 7),)def forward(self, x):x = self.model(x)return x

 将这里一切工作都做好之后,运行main.py文件,

会输出你数据种类名称的数组,计算精确率,召回率和特异度和平均精确率和平均召回率,还会绘制相应的混淆矩阵图,且自动将图片保存在当前文件夹下。

代码下载链接:https://pan.baidu.com/s/1gXoVh2rfc19OgpGRS3IYjg 
提取码:8mqb

       如果觉得有用麻烦点个赞,有啥问题在评论中指出来,看到会回复,非常感谢支持

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

  1. ML之ME/LF:机器学习之风控业务中常用模型评估指标PSI(人群偏移度指标)的的简介、使用方法、案例应用之详细攻略

    ML之ME/LF:机器学习之风控业务中常用模型评估指标PSI(人群偏移度指标)的的简介.使用方法.案例应用之详细攻略 目录 PSI(稳定度指标)的简介 1.如何计算PSI? (1).PSI计算过程

  2. 深度学习之卷积神经网络CNN 常用的几个模型

    LeNet5 论文:http://yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf LeNet-5:是Yann LeCun在1998年设计的用于手写数字识别的卷 ...

  3. 干货 | 深度学习之卷积神经网络(CNN)的模型结构

    微信公众号 关键字全网搜索最新排名 [机器学习算法]:排名第一 [机器学习]:排名第一 [Python]:排名第三 [算法]:排名第四 前言 在前面我们讲述了DNN的模型与前向反向传播算法.而在DNN ...

  4. 深度学习_卷积神经网络中感受野的理解和计算

    卷积神经网络感受野的计算方法 https://blog.csdn.net/qq_36653505/article/details/83473943?utm_medium=distribute.pc_r ...

  5. 深度学习:卷积神经网络中的卷积核

    卷积核就是图像处理时,给定输入图像,输入图像中一个小区域中像素加权平均后成为输出图像中的每个对应像素,其中权值由一个函数定义,这个函数称为卷积核.又称滤波器. 同样提取某个特征,经过不同卷积核卷积后效 ...

  6. 【深度学习】深入浅出神经网络框架的模型元件(常用层和卷积层)

    [深度学习]深入浅出神经网络框架的模型元件(常用层和卷积层) 文章目录 1 常用层1.1 Dense1.2 Activation层1.3 Dropout1.4 Flatten 2 卷积层2.1 Cov ...

  7. 【深度学习】解析神经网络中的数值稳定性、模型初始化和分布偏移(Pytorch)

    [深度学习]解析神经网络中的数值稳定性.模型初始化和分布偏移 文章目录 1 概述1.1 梯度消失和梯度爆炸1.2 打破对称性 2 参数初始化 3 环境和分布偏移3.1 协变量偏移3.2 标签偏移3.3 ...

  8. 【深度学习】深入浅出神经网络框架的模型元件(池化、正则化和反卷积层)

    [深度学习]深入浅出神经网络框架的模型元件(池化.正则化和反卷积层) 文章目录 1 池化层 1.1 MaxPooling2D 1.2 MaxPooling1D: 1.3 AveragePooling2 ...

  9. 深度学习~卷积神经网络(CNN)概述

    目录​​​​​​​ 1. 卷积神经网络的形成和演变 1.1 卷积神经网络结构 1.2 卷积神经网络的应用和影响 1.3 卷积神经网络的缺陷和视图 1.3.1 缺陷:可能错分 1.3.2 解决方法:视图 ...

  10. 深度学习之卷积神经网络(10)CIFAR10与VGG13实战

    深度学习之卷积神经网络(10)CIFAR10与VGG13实战 MNIST是机器学习最常用的数据集之一,但由于手写数字图片非常简单,并且MNIST数据集只保存了图片灰度信息,并不适合输入设计为RGB三通 ...

最新文章

  1. Web3.0来了!玩法变了
  2. 本地代码推送到github仓库
  3. golang map源码分析
  4. 16行代码AC——紫书| 例题7-3 Fractions Again?! (UVA - 10976)_时间复杂度O(n)
  5. usb接口供电不足_AMD RX 6000 系列显卡配备USB-C 接口,支持外接供电
  6. linux2.6 gcc,在Linux内核 2.6.38.7 上,gcc堆栈粉碎代码不工作 请帮助_gcc_开发99编程知识库...
  7. 关于SQlserver数据库的加密应用
  8. python做系统查人的往来的信息_L01-04:python查询员工信息表练习
  9. 腾讯广告北京招聘专场,offer等你解锁
  10. pytorch学习笔记(八):softmax回归的从零开始实现
  11. matlab版本和yalmip兼容,科学网—matlab cvx + yalmip - 吴锐的博文
  12. python正则表达式提取c语言中的函数,Python正则表达式匹配C语言函数
  13. Recorder.js HTML5+JS实现网页录音
  14. R语言manova函数稳健多元方差分析(Robust one-way MANOVA)、rrcov包中的wilks.test函数稳健单向MANOVA、vegan包的adonis函数非参数Manova等效
  15. 经典日常英语口语回汇总大全
  16. cadence 17.2 入门学习2 allegro
  17. 如何做好网站SEO优化,网站SEO关键词优化的5个技巧
  18. 从键盘输入的年份,判断该年是否是闰年
  19. Android App内部防截屏技术
  20. mysql5_7winx64,MySQL 5.7.30 Winx64 安装

热门文章

  1. 数据结构与算法之迷宫回溯
  2. 计算机各种办公软件都很卡,电脑中打开office2016办公软件很卡的解决方法
  3. c++ primer plus 第十四章 C++中的代码重用
  4. 个人对傅里叶分析的理解与整理(持续整理中)
  5. 图论(graph)相关算法总结
  6. LimeSDR GPS欺骗
  7. 稳定同位素示踪技术在内源性物质代谢调控中的应用
  8. padavan mysql密码_[教程][搭建网站网盘] Padavan固件一键安装ONMP搭建Web环境,网站,网盘,相册等...
  9. 中介效应、调节效应与交互作用咋回事?
  10. android 照片同步到iphone,简明教程教你同步安卓设备照片到iCloud照片流