【新手适用】手把手教你从零开始实现一个基于Pytorch的卷积神经网络CNN三: 如何验证和测试模型

【新手适用】手把手教你从零开始实现一个基于Pytorch的卷积神经网络CNN二: 如何训练模型,内附详细损失、准确率、均值计算-CSDN博客

从零开始实现一个基于Pytorch的卷积神经网络 - 知乎 (zhihu.com)

1 初始化、导入模型和数据集

新建一个test.py文件,导入所需的包,并且定义测试数据集和dataloader。

测试和训练的不同点:

  • data:把train设为False
  • dataloader:不需要打乱数据集,设置shuffle=False,一批次只需要送入一张图像,batchsize=1
import torch
import torchvision
import torch.utils.data as Data

# 把train设为False
test_data = torchvision.datasets.MNIST(root='./data/', train=False, transform=torchvision.transforms.ToTensor(), download=False)
# 不需要打乱数据集,一批次只需要送入一张图像
test_loader = Data.DataLoader(test_data, batch_size=1, shuffle=False)

 定义所需的设备。

# 定义需要使用的设备
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

 2 加载模型

加载模型需要使用torch.load(f, map_location, pickle_module, pickle_load_args)函数

  • f:我们模型文件的路径和名称,在这里是'./LeNet.pkl'
  • map_location重新映射使用的设备,一般情况下这个参数不需要任何的修改,但是如果你想要把一个用GPU训练的模型放在一个只有cpu的设备上时会发生一些错误,而这时就需要定义该参数了,可以在这里填上torch.device(device)以避免这个错误的发生。
  • pickle_module, pickle_load_args基本上不需要进行任何的设置。

加载好模型之后把模型上传到设备上。 

# 加载模型
net = torch.load('./LeNet.pkl',map_location=torch.device(device))
# 上传模型到设备
net.to(device)

3 关闭梯度

测试阶段不需要对模型的参数进行更新,可以关闭自动求导功能;并使用net.eval()方法屏蔽Dropout层、冻结BN层的参数,防止在测试阶段BN层发生参数更新

# 关闭梯度
torch.set_grad_enabled(False)
# 开启验证
net.eval()

测试及输出结果

# 获取数据及大小
length = test_data.data.size(0)
# 使用for将数据输入模型并且获得输出
for i,data in enumerate(test_loader):
    # 获得数据和标注
    x,y = data
    # 模型输出
    y_pred = net(x.to(device,torch.float))
    # 获得预测的标签
    pred = y_pred.argmax(dim=1)
    # 统计预测正确的数量
    acc += (pred.data.cpu() == y.data).sum()
    # 每一次预测后输出其预测的结果和对应的真实值
    print('Predict:', int(pred.data.cpu()), '|Ground Truth:', int(y.data))
    # 计算模型在测试集上的准确率
acc = (acc / length) * 100
# 转换为百分比的形式
print('Accuracy: %.2f' % acc, '%')

输出结果如下所示: 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/509692.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android的图片加载框架

Android的图片加载框架 为什么要使用图片加载框架?图片加载框架1. Universal Image Loader [https://github.com/nostra13/Android-Universal-Image-Loader](https://github.com/nostra13/Android-Universal-Image-Loader)2. Glide [https://muyangmin.github.io/gl…

SWM341系列SDRAM应用

SWM341系列SDRAM应用 1、不同的时钟频率下,SDRAM的初始化参数设置 现象:驱屏应用,显示一段时间后出现卡住的现象 分析:SDRAM的初始 化参数优化 主频150Mhz,建议配置CASL 3,TRFC ≥8。 主频100Mhz,ClkDiv可配置为1…

低压500kW 发电机组测试交流干式负载箱的工作方式

低压500kW发电机组测试交流干式负载箱是一种专门用于测试发电机组性能的设备,其主要功能是在发电机组运行过程中,通过模拟实际负载情况,对发电机组的输出功率、电压、电流等参数进行实时监测和调整,以确保发电机组在各种工况下的稳…

手写瀑布流

之前用vue-masonry实现瀑布流 <!DOCTYPE html> <html><head><meta http-equiv"content-type" content"text/html; charsetutf-8"><meta name"viewport" content"widthdevice-width,initial-scale1,maximum-sc…

算法——矩阵,被围绕的区域

. - 力扣&#xff08;LeetCode&#xff09; 最开始也是考虑使用dfs&#xff0c;对于矩阵中的每个点&#xff0c;如果能到达边界的O&#xff0c;则跳过继续dfs。否则如果上下左右四个方向都无法到达边界的O&#xff0c;则说明当前的无法到达&#xff0c;在一个set中记录他的行数…

AcWing刷题-游戏

游戏 DP l lambda: [int(x) for x in input().split()]n l()[0] w [0] while len(w) < n:w l()s [0] * (n 1) for i in range(1, n 1): s[i] s[i - 1] w[i]f [[0] * (n 1) for _ in range(n 1)]for i in range(1, n 1): f[i][i] w[i]for length in range(2, …

WordPress外贸建站Astra免费版教程指南(2024)

在WordPress的外贸建站主题中&#xff0c;有许多备受欢迎的主题&#xff0c;如Avada、Astra、Hello、Kadence等最佳WordPress外贸主题&#xff0c;它们都能满足建站需求并在市场上广受认可。然而&#xff0c;今天我要介绍的是一个不断颠覆建站人员思维的黑马——Astra主题。 原…

Java

1.学生和老师都会有work方法&#xff0c;学生的工作是学习&#xff0c;老师的工作是教书&#xff0c;我利用了一个接口来实现&#xff1b; 2.同时&#xff0c;老师和学生都是人&#xff0c;并且都有姓名&#xff0c;姓名&#xff0c;年龄和身高等特征&#xff0c;我用了一个继承…

Python基于PyQt5制作的一个上位机软件,用来控制一个Arduino四自由度机械臂

PyQt_Arduino 介绍 用PyQt5制作的一个上位机软件&#xff0c;用来控制一个Arduino四自由度机械臂。当然&#xff0c;为了扩展的需要&#xff0c;界面是按照六自由度机械臂制作的。 开发环境 系统&#xff1a; windows10 处理器: Intel Core™i7-8550U CPU 1.8GHz 2.00GHz …

服务器远程桌面连接不上怎么办?

随着互联网的发展和远程办公的兴起&#xff0c;服务器远程桌面连接成为了许多企业和个人不可或缺的工具。偶尔我们可能会碰到服务器远程桌面连接不上的情况&#xff0c;这时候我们需要找到解决办法&#xff0c;确保高效地远程访问服务器。 天联组网——突破远程连接障碍 在我们…

isaacgym 渲染黑屏

问题描述&#xff1a; isaacgym安装完IsaacGym_Preview_4_Package.tar.gz之后&#xff0c;运行python joint_monkey.py没有任何内容现实&#xff0c;但是终端还是正常输出信息。 环境是ubuntu22服务器&#xff0c;python3.8&#xff0c;nvidia Driver Version: 515.65.01 CUDA…

Linux shell编程学习笔记45:uname命令-获取Linux系统信息

0 前言 linux 有多个发行版本&#xff0c;不同的版本都有自己的版本号。 如何知道自己使用的Linux的系统信息呢&#xff1f; 使用uname命令、hostnamectl命令&#xff0c;或者通过查看/proc/version文件来了解这些信息。 我们先看看uname命令。 1 uname 命令的功能和格式 …

如何合理利用chatgpt写高质量新闻稿,10分钟速成(五)

演示站点&#xff1a; https://www.cnsai.net/ 论文模块 官方论坛&#xff1a; www.jingyuai.com 京娱AI下载源码 人工智能&#xff08;AI&#xff09;技术作为当今科技创新的前沿领域&#xff0c;为创业者提供了广阔的机会和挑战。随着AI技术的快速发展和应用领域的不断拓展&a…

大模型之路2:继续趟一条小路

继续趟一条小路&#xff0c;可谓是充满了曲折&#xff0c;当然&#xff0c;必不可少的还是坑。 吐槽 看过的喷友&#xff0c;其实你看完以后&#xff0c;大概率也就是和我一起骂骂街&#xff0c;因为....我也的确没理清楚。 我也不知道做错了什么&#xff0c;就是运行不过去…

探索 ZKFair 的Dargon Slayer蓝图,解锁新阶段的潜力

在当前区块链技术的发展中&#xff0c;Layer 2&#xff08;L2&#xff09;解决方案已成为提高区块链扩容性、降低交易成本和提升交易速度的关键技术&#xff0c;但它仍面临一些关键问题和挑战&#xff0c;例如用户体验的改进、跨链互操作性、安全性以及去中心化程度。在这些背景…

马上蓝桥了,干货总结基础树论知识点

目录 今日知识点&#xff1a;对于每个子树如果和小于0就返回0&#xff1b;如果大于0就直接返回。 注意异或的性质&#xff0c;偶消奇不消&#xff0c;所以lca上面的都消掉了&#xff0c;并不需要跑lca&#xff0c;也就是说只需要把根到所有点的距离跑出来即可 如果上传过来小…

Redis如何实现分布式锁,单机Redis与集群Redis问题解决方案

场景1&#xff1a;在单机场景下&#xff0c;可以通过同步锁进行加锁 在单机系统下&#xff0c;该场景是适用的&#xff0c;所有的线程都需要等待同步锁释放 场景2&#xff1a;分布式场景下的分布式锁 场景1中的代码不适用与分布式系统&#xff0c;因为上述的同步锁是JVM层次的…

如何在CentOS安装StackEdit Markdown编辑器并实现无公网IP远程访问使用

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 文章目录 前言1. ubuntu安装VNC2. 设置vnc开机启动3. windows 安…

从零开始构建gRPC的Go服务

介绍 Protocol Buffers and gRPC是用于定义通过网络有效通信的微服务的流行技术。许多公司在Go中构建gRPC微服务&#xff0c;发布了他们开发的框架&#xff0c;本文将从gRPC入门开始&#xff0c;一步一步构建一个gRPC服务。 背景 之前在B站看过一个gRPC教学视频&#xff0c;…

朵米3.5客服系统源码,附带系统搭建教程

朵米客服系统是一款全功能的客户服务解决方案&#xff0c;提供多渠道支持&#xff08;如在线聊天、邮件、电话等&#xff09;&#xff0c;帮助企业建立与客户的实时互动。该系统具有智能分流功能&#xff0c;可以快速将客户请求分配给适当的客服人员&#xff0c;提高工作效率。…