基于CNN的FashionMNIST数据集识别3——模型验证
源码
import torch
import torch.utils.data as Data
from torchvision import transforms
from torchvision.datasets import FashionMNIST
from model import LeNetdef test_data_process():test_data = FashionMNIST(root='./data',train=False,transform=transforms.Compose([transforms.Resize(size=28), transforms.ToTensor()]),download=True)test_dataloader = Data.DataLoader(dataset=test_data,batch_size=1,shuffle=True,num_workers=0)return test_dataloaderdef test_model_process(model, test_dataloader):# 设定测试所用到的设备,有GPU用GPU没有GPU用CPUdevice = "cuda" if torch.cuda.is_available() else 'cpu'# 讲模型放入到训练设备中model = model.to(device)# 初始化参数test_corrects = 0.0test_num = 0# 只进行前向传播计算,不计算梯度,从而节省内存,加快运行速度with torch.no_grad():for test_data_x, test_data_y in test_dataloader:# 将特征放入到测试设备中test_data_x = test_data_x.to(device)# 将标签放入到测试设备中test_data_y = test_data_y.to(device)# 设置模型为评估模式model.eval()# 前向传播过程,输入为测试数据集,输出为对每个样本的预测值output= model(test_data_x)# 查找每一行中最大值对应的行标pre_lab = torch.argmax(output, dim=1)# 如果预测正确,则准确度test_corrects加1test_corrects += torch.sum(pre_lab == test_data_y.data)# 将所有的测试样本进行累加test_num += test_data_x.size(0)# 计算测试准确率test_acc = test_corrects.double().item() / test_numprint("测试的准确率为:", test_acc)if __name__=="__main__":# 加载模型model = LeNet()model.load_state_dict(torch.load('best_model.pth'))# 加载测试数据test_dataloader = test_data_process()# 加载模型测试的函数test_model_process(model, test_dataloader)
源码讲解
当模型训练完毕后,我们得到的是一组最优的参数配置。

最后要做的就是验证这组参数的表现。
数据准备
def test_data_process():test_data = FashionMNIST(root='./data',train=False,transform=transforms.Compose([transforms.Resize(size=28), transforms.ToTensor()]),download=True)test_dataloader = Data.DataLoader(dataset=test_data,batch_size=1,shuffle=True,num_workers=0)return test_dataloader
测试数据的准备和训练数据的准备有明显不同:
- 测试数据集是将MINIST里所有的数据当做验证集。并且训练模式设置为false。
- dataloader里面的batch大小设置为1,也就是说对每个样本进行验证,不再存在“分批”的概念。
循环验证
# 只进行前向传播计算,不计算梯度,从而节省内存,加快运行速度with torch.no_grad():for test_data_x, test_data_y in test_dataloader:# 将特征放入到测试设备中test_data_x = test_data_x.to(device)# 将标签放入到测试设备中test_data_y = test_data_y.to(device)# 设置模型为评估模式model.eval()# 前向传播过程,输入为测试数据集,输出为对每个样本的预测值output= model(test_data_x)# 查找每一行中最大值对应的行标pre_lab = torch.argmax(output, dim=1)# 如果预测正确,则准确度test_corrects加1test_corrects += torch.sum(pre_lab == test_data_y.data)# 将所有的测试样本进行累加test_num += test_data_x.size(0)
和之前训练模型时的验证逻辑基本相同。只进行前向传播,将预测正确的样本个数进行累加。
代码运行
if __name__=="__main__":# 加载模型model = LeNet()model.load_state_dict(torch.load('best_model.pth'))# 加载测试数据test_dataloader = test_data_process()# 加载模型测试的函数test_model_process(model, test_dataloader)
在代码运行时,需要将参数载入到模型里,再进行验证。

相关文章:
基于CNN的FashionMNIST数据集识别3——模型验证
源码 import torch import torch.utils.data as Data from torchvision import transforms from torchvision.datasets import FashionMNIST from model import LeNetdef test_data_process():test_data FashionMNIST(root./data,trainFalse,transformtransforms.Compose([tr…...
go channel 的用法和核心原理、使用场景
一、Channel 的核心用法 1. 基本操作 // 创建无缓冲 Channel(同步通信) ch : make(chan int) // 创建有缓冲 Channel(容量为5,异步通信) bufferedCh : make(chan int, 5) // 发送数据到 Channel ch <- 42 // 从…...
pyside6学习专栏(七):自定义QTableWidget的扩展子类QTableWidgetEx
PySide6界面编程中较常用的控件还有QTableWidget表格控件,用来将加载的数据在表格中显示出来,下面继承QTableWidget编写其扩展子类QTableWidgetEx,来实现用单元格来显示除数据文字外,还可以对表格的单元格的文字颜色、背景底色进行设置&#…...
Mybatis常用动态 SQL 相关标签
1. <if> 用于条件判断,当满足条件时执行对应的 SQL 片段。 示例: <select id"findUser" resultType"User">SELECT * FROM usersWHERE 11<if test"name ! null and name ! ">AND name #{name}</if><if…...
AWQ和GPTQ量化的区别
一、前言 本地化部署deepseek时发现,如果是量化版的deepseek,会节约很多的内容,然后一般有两种量化技术,那么这两种量化技术有什么区别呢? 二、量化技术对比 在模型量化领域,AWQ 和 GPTQ 是两种不同的量…...
ESP32S3:解决RWDT无法触发中断问题,二次开发者怎么才能使用内部RTC看门狗中断RWDT呢?
目录 基于ESP32S3:解决RWDT无法触发中断问题引言解决方案1. 查看报错日志2. 分析报错及一步一步找到解决方法3.小结我的源码基于ESP32S3:解决RWDT无法触发中断问题 引言 在嵌入式系统中,RWDT(看门狗定时器)是确保系统稳定性的重要组件。然而,在某些情况下,RWDT可能无法…...
基于SpringBoot的民宿管理系统的设计与实现(源码+SQL脚本+LW+部署讲解等)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
go 日志框架
内置log import ("log""os" )func main() {// 设置loglog.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate)// 自定义日志前缀log.SetPrefix("[pprof]")log.Println("main ..")// 如果用format就用PrintF,而不是…...
如何在 PDF 文件中嵌入自定义数据
由于 PDF 文件格式功能强大且灵活,它经常被用于内部工作流程。有时候,将自定义数据嵌入 PDF 文件本身会非常有用。通常,这些信息会被大多数工具忽略,因此 PDF 仍然可以作为普通 PDF 文件正常使用。 以下是一些实现方法࿱…...
计算机毕业设计SpringBoot+Vue.js服装商城 服装购物系统(源码+LW文档+PPT+讲解+开题报告)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
22.回溯算法4
递增子序列 这里不能排序,因为数组的顺序是对结果有影响的,所以只能通过used数组来去重 class Solution { public:vector<int> path;vector<vector<int>> res;void backtracking(vector<int>& nums,int start){if(path.si…...
linux -对文件描述符的操作dup、fcntl有五种
dup #include<unistd.h> int dup(int oldfd);作用:复制一个新的文件描述符fd 3, int fd1 dup(fd);f指向的是a.txt,fd1指向的也是a.txt从空闲的文件描述符表中找一个最小的作为新的拷贝的文件描述符返回:成功返回新的文件描述符,失败…...
技术解析 | 适用于TeamCity的Unreal Engine支持插件,提升游戏构建效率
龙智是JetBrains授权合作伙伴、Perforce授权合作伙伴,为您提供TeamCity、Perforce Helix Core等热门的游戏开发工具及一站式服务 TeamCity 是游戏开发的热门选择,大家选择它的原因包括支持 Perforce、可以进行本地安装,并提供了多种配置选项。…...
Ubuntu22.04 - brpc的安装和使用
目录 介绍安装使用 介绍 brpc 是用 c语言编写的工业级 RPC 框架,常用于搜索、存储、机器学习、广告、推荐等高性能系统 安装 先安装依赖 apt-get install -y git g make libssl-dev libprotobuf-dev libprotoc-dev protobuf-compiler libleveldb-dev libgflags-d…...
网络运维学习笔记 018 HCIA-Datacom综合实验02
文章目录 综合实验2sw3:sw4:gw:core1(sw1):core2(sw2):ISP 综合实验2 sw3: vlan 2 stp mode stp int e0/0/1 port link-type trunk port trunk allow-pass v…...
Vulhub靶机 Apache Druid(CVE-2021-25646)(渗透测试详解)
一、开启vulhub环境 docker-compose up -d 启动 docker ps 查看开放的端口 1、漏洞范围 在Druid0.20.0及更低版本中 二、访问靶机IP 8888端口 1、点击Load data进入新界面后,再点击local disk按钮。 2、进入新界面后,在标红框的Base directory栏写上…...
VSCode配置自动生成头文件
一、配置步骤: 1.打开命令面板(CtrlShiftp): 2.输入snippets 选择配置代码片段 3. 选择新建全局代码片段 输入文件名,比如header_cpp(随便定义),然后点击键盘回车按钮,得到下面这个文件。 增加配置文…...
Xcode如何高效的一键重命名某个关键字
1.选中某个需要修改的关键字; 2.右击,选择Refactor->Rename… 然后就会出现如下界面: 此时就可以一键重命名了。 还可以设置快捷键。 1.打开Settings 2.找到Key Bindings 3.搜索rename 4.出现三个,点击一个地方设置后其…...
React 高阶组件的优缺点
React 高阶组件的优缺点 优点 1. 代码复用性高 公共逻辑封装:当多个组件需要实现相同的功能或逻辑时,高阶组件可以将这些逻辑封装起来,避免代码重复。例如,多个组件都需要在挂载时进行数据获取操作,就可以创建一个数…...
(五)趣学设计模式 之 建造者模式!
目录 一、 啥是建造者模式?二、 为什么要用建造者模式?三、 建造者模式怎么实现?四、 建造者模式的应用场景五、 建造者模式的优点和缺点六、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方…...
告别海量告警!用UEBA技术给你的SIEM系统装上‘智能大脑’(实战配置思路)
告别海量告警!用UEBA技术给你的SIEM系统装上‘智能大脑’(实战配置思路) 当SIEM系统的告警面板每天弹出上千条警报时,安全团队往往陷入两难境地:忽略任何一条告警都可能放过真实威胁,但逐一排查又会耗尽有限…...
ARM地址转换与分支记录缓冲区(BRB)机制详解
1. ARM地址转换机制深度解析在ARMv8/ARMv9架构中,地址转换是内存管理单元(MMU)的核心功能,它通过多级页表将虚拟地址(VA)转换为物理地址(PA)。这种转换机制不仅实现了内存隔离和保护,还为虚拟化提供了硬件支持。我们先从最基础的地址转换指令…...
别再只玩点灯了!用ESP32+MQTT打造可商用的智能花盆原型,聊聊物联网产品开发流程
从DIY到商用原型:基于ESP32的智能花盆开发全流程解析 当你的窗台绿植开始通过MQTT协议向你汇报土壤湿度时,物联网的魅力才真正显现。这不是科幻电影里的场景,而是每个开发者都能实现的智能硬件项目。本文将带你超越简单的点灯实验,…...
VSCode护眼主题终极指南:如何完美复刻Eclipse绿色背景(附详细配置代码)
VSCode护眼主题终极指南:如何完美复刻Eclipse绿色背景(附详细配置代码) 作为一名长期与代码打交道的开发者,眼睛的健康问题不容忽视。许多从Eclipse转向VSCode的用户都会怀念那个经典的绿色背景——它不仅代表着一种习惯ÿ…...
别光会explain()了!Spark 3.0+ 中这几个隐藏的执行计划模式更实用
解锁Spark执行计划的隐藏模式:超越explain()的高级调试技巧 当你在Spark作业遇到性能瓶颈时,是否还在反复查看基础explain()输出却找不到头绪?作为数据工程师,我们常常陷入这样的困境:明明知道执行计划很重要ÿ…...
010、展望:架构演化的逻辑与未来——效率、智能与硬件协同设计之路
昨天深夜调一个BERT模型部署,显存又爆了。盯着监控面板上那条陡峭的曲线,我忽然想起三年前同样的场景——那时候我们还在争论要不要上Transformer。从BERT到GPT,再到最近冒出来的Mamba,这条演化路径背后到底藏着什么逻辑?今天不聊具体代码,咱们聊聊这条路上的风景和还没修…...
2026最新|零基础在Windows搭建AI Agent开发环境完整教程(附可运行代码)
2026最新|零基础在Windows搭建AI Agent开发环境完整教程(附可运行代码) 摘要 本文解决开发者在 Windows 环境下入门 AI Agent 开发时常见的环境配置、依赖安装和第一个 Agent 示例跑通问题,适合刚接触智能体开发、自动化任务和多…...
【2025企业级部署红线预警】:C# 14 原生 AOT 下 Dify 插件动态加载失效的4种静默崩溃场景及热修复补丁
第一章:C# 14 原生 AOT 部署 Dify 客户端插件下载与安装概览C# 14 引入了对原生 AOT(Ahead-of-Time)编译的深度集成支持,使 .NET 应用可直接编译为无运行时依赖的独立二进制文件。在部署 Dify 官方客户端插件(如用于本…...
Spring Boot 多数据源配置方案
Spring Boot多数据源配置方案详解 在复杂的业务场景中,单一数据源往往无法满足需求,例如需要同时连接多个数据库或读写分离。Spring Boot通过灵活的配置支持多数据源,为开发者提供了高效解决方案。本文将深入探讨多数据源的核心配置方法&…...
2026年4月20日60秒读懂世界:机器人半马、12306拦截抢票软件与二手车价格战,今天最值得关注的6个信号
🔥个人主页:杨利杰YJlio❄️个人专栏:《Sysinternals实战教程》《Windows PowerShell 实战》《WINDOWS教程》《IOS教程》《微信助手》《锤子助手》 《Python》 《Kali Linux》 《那些年未解决的Windows疑难杂症》🌟 让复杂的事情更…...
