【pytorch】使用训练好后的模型权重,在验证集上输出分类的混淆矩阵并保存错误图片

这篇具有很好参考价值的文章主要介绍了【pytorch】使用训练好后的模型权重,在验证集上输出分类的混淆矩阵并保存错误图片。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在机器学习领域,混淆矩阵是一个非常有用的指标,它可以帮助我们更好地理解模型在验证集上的表现。本文介绍了如何使用pytorch框架,利用训练好后的模型权重,在验证集上输出分类的混淆矩阵,并保存错误图片的方法。

首先,我们需要准备一个pytorch框架的模型,并将模型权重载入到模型中。然后,我们可以使用pytorch的dataloader加载验证集,并使用模型进行预测。接下来,我们可以使用sklearn的confusion_matrix函数,计算出验证集上的混淆矩阵。最后,我们可以获取预测错误的图片,并将它们保存起来,以便后续分析。

总之,本文介绍了如何使用pytorch框架,利用训练好后的模型权重,在验证集上输出分类的混淆矩阵,并保存错误图片的方法。通过使用混淆矩阵,我们可以更好地理解模型在验证集上的表现,并及时发现模型的问题,从而提高模型的准确率。

import matplotlib.pyplot as plt
import torchvision
import torch
import torch.nn as nn
import torchvision.models as models
import torchvision.transforms as transforms
import numpy as np
import torch.nn.functional as F
from PIL import Image
from sklearn.metrics import confusion_matrix
import os
# 加载resnet18模型
resnet18 = models.resnet18(pretrained=False)

# 获取resnet18最后一层输出,输出为512,最后一层本来是用作 分类的,原始网络分为1000类
# 用 softmax函数或者 fully connected 函数,但是用 nn.identtiy() 函数把最后一层替换掉,相当于得到分类之前的特征!
#Identity模块,它将输入直接传递给输出,而不会对输入进行任何变换。
resnet18.fc = nn.Identity()

# 构建新的网络,将resnet18的输出作为输入
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        #全卷积神经网络,不用调整输入大小
        self.resnet18 = resnet18
        self.fc1 = nn.Linear(512, 256)
        self.fc2 = nn.Linear(256, 128)
        self.fc3 = nn.Linear(128, 64)
        self.fc4 = nn.Linear(64, 10)
        self.fc5 = nn.Linear(10, 2)
        self.softmax = nn.Softmax(dim=1)
    def forward(self, x):
        x = self.resnet18(x)
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = F.relu(self.fc3(x))
        x = F.relu(self.fc4(x))
        x = F.relu(self.fc5(x))
        x = self.softmax(x)
        x=x.view(-1,2)
        return x

# 实例化网络
net = Net()
net.load_state_dict(torch.load('./bestmodel98.4375.pth'))
# 将模型放入GPU
net = net.cuda()

def rgb2bgr(image):
    image = np.array(image)[:, :, ::-1]
    image=Image.fromarray(np.uint8(image))
    return image
transform2 = transforms.Compose([
    transforms.Resize(112),
    # rgb转bgr
    torchvision.transforms.Lambda(rgb2bgr),
    # 入的图片为PIL image 或者 numpy.nadrry格式的图片,其shape为(HxWxC)数值范围在[0,255],转换之后shape为(CxHxw),数值范围在[0,1]
    transforms.ToTensor(),
    # 进行归一化和标准化,Imagenet数据集的均值和方差为:mean=(0.485, 0.456, 0.406),std=(0.229, 0.224, 0.225),
    # 因为这是在百万张图像上计算而得的,所以我们通常见到在训练过程中使用它们做标准化。
    transforms.Normalize(mean=[0.406, 0.456, 0.485], std=[0.225, 0.224, 0.229])
])

val_dataset = torchvision.datasets.ImageFolder(r'D:\eyeDataSet\validate',transform=transform2)
val_loader = torch.utils.data.DataLoader(val_dataset, batch_size=256, shuffle=True)

# 验证集上的表现情况:
correct = 0
total = 0
labelsAll=[]
predictedAll=[]
with torch.no_grad():
    for data in val_loader:
        images, labels = data
        images, labels = images.cuda(), labels.cuda()
        outputs = net(images)
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()
        labelsAll+=labels.cpu()
        predictedAll +=predicted.cpu()

print('Accuracy of the network on the validation images: %.3f %%' % (100 * correct / total))
# 增加混淆矩阵的输出:
y_true = np.array(labelsAll)
y_pred = np.array(predictedAll)
cm = confusion_matrix(y_true, y_pred)
print(cm)
# 替换分类序号与分类名关系:
classes = {}
for index, name in enumerate(val_dataset.class_to_idx):
    classes[index] = name
for i in range(len(cm)):
    for j in range(len(cm[i])):
        print('{} 被预测为 {}: 共{}个'.format(classes[i], classes[j], cm[i][j]))

#将预测失败的图片保存进文件夹:
# 计算预测失败的图片
fail_index=[]
for i in range(len(labelsAll)):
    if labelsAll[i]!=predictedAll[i]:
        fail_index.append(i)

# 将预测失败的图片保存进某指定文件夹内,后缀名为.jpg
for i in fail_index:
    img_name=val_dataset.imgs[i][0]
    img = Image.open(img_name)
    # 检查文件夹是否存在
    if not os.path.exists(r'D:\fail_img'):
        os.makedirs(r'D:\fail_img')
    img.save(r'D:\fail_img\fail_img_'+str(i)+'.jpg')

pytorch输出混淆矩阵,c++,深度学习,pytorch,pytorch,分类,矩阵文章来源地址https://www.toymoban.com/news/detail-642718.html

到了这里,关于【pytorch】使用训练好后的模型权重,在验证集上输出分类的混淆矩阵并保存错误图片的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • [PyTorch]预训练权重的转换

            众所周知,使用大量数据预训练后的骨干网络可以提升整个模型的泛化能力,而我们如果将网络的骨干网络替换后则不能直接使用原来的权重。这个项目的作用是在你替换骨干网络后可以将网络预训练权重一并“偷”过来。         下给结论 :将DeeplabV3+的骨干网

    2023年04月21日
    浏览(38)
  • 在 CelebA 数据集上训练的 PyTorch 中的基本变分自动编码器

    摩西·西珀博士         我最近发现自己需要一种方法将图像 编码到潜在嵌入中, 调整 嵌入,然后 生成 新图像。有一些强大的方法可以创建嵌入 或 从嵌入生成。如果你想同时做到这两点,一种自然且相当简单的方法是使用变分自动编码器。

    2024年02月05日
    浏览(55)
  • LLMs之llama_7b_qlora:源代码解读inference.py(基于合并后的权重文件进行模型推理)将基于之前合并Lora模型权重后的hl_llama_7b模型进行文本生成(基于用户交互输入

    LLMs之llama_7b_qlora:源码解读inference.py(基于合并后的权重文件进行模型推理)将基于之前合并Lora模型权重后的hl_llama_7b模型进行文本生成(基于用户交互输入的上下文生成新文本) 目录

    2024年02月16日
    浏览(47)
  • pytorch进阶学习(六):如何对训练好的模型进行优化、验证并且对训练过程进行准确率、损失值等的可视化,新手友好超详细记录

    课程资源:  7、模型验证与训练过程可视化【小学生都会的Pytorch】【提供源码】_哔哩哔哩_bilibili 推荐与上一节笔记搭配食用~: pytorch进阶学习(五):神经网络迁移学习应用的保姆级详细介绍,如何将训练好的模型替换成自己所需模型_好喜欢吃红柚子的博客-CSDN博客 训练

    2023年04月17日
    浏览(47)
  • 模型权重和深度学习训练框架之间的关系

    通常我们可以看到有Caffe或Pytorch或TensorFlow的模型参数文件 不同的团队可能会使用不同的深度学习训练框架, 然后使用其 内部的模型权重保存函数 进行保存, 以便之后 自己的复用 或 发布开源 , 让别人使用自己已经训练好的模型权重, 在其基础上进一步做改进或训练 那么该团

    2024年02月11日
    浏览(53)
  • pytorch保存、加载和解析模型权重

    1、模型保存和加载          主要有两种情况:一是仅保存参数,二是保存参数及模型结构。 保存参数:          torch.save(net.state_dict()) 加载参数(加载参数前需要先实例化模型):          param = torch.load(\\\'param.pth\\\')          net.load_state_dict(param) 保存模型结构

    2024年02月16日
    浏览(43)
  • torchvision pytorch预训练模型目标检测使用

    参考: https://pytorch.org/vision/0.13/models.html https://blog.csdn.net/weixin_42357472/article/details/131747022 有分类、检测、分割相关预训练模型 https://pytorch.org/vision/0.13/models.html#object-detection-instance-segmentation-and-person-keypoint-detection https://h-huang.github.io/tutorials/intermediate/torchvision_tutorial.html https

    2024年03月19日
    浏览(42)
  • 使用Pytorch加载预训练模型及修改网络结构

    可以看到, AlexNet 有三个层,分别是 features、avgpool、classifier 。用 model.features 查看 features层 (也就是卷积层)的网络结构。

    2024年02月13日
    浏览(37)
  • pytorch或者TensorFlow训练得到的模型嵌入到设备当中使用

    导出模型 : 首先,将已训练的模型导出为一个文件,以便在其他设备上加载和使用。导出的方法和步骤可能因PyTorch或TensorFlow的版本和使用情况而有所不同。一般来说,您需要保存模型的权重参数和结构定义,以及任何必要的标识信息(如输入维度、类别标签等)。 将模型加

    2024年02月16日
    浏览(68)
  • 使用PyTorch解决多分类问题:构建、训练和评估深度学习模型

    💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢迎在文章下方留下你的评论和反馈。我期待着与你分享知识、互

    2024年02月07日
    浏览(42)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包