P31_完整的模型验证套路

news/2025/11/27 21:10:41/文章来源:https://www.cnblogs.com/Samar-blog/p/19279468

P31_完整的模型验证套路

完整的模型验证(测试,demo)套路——利用已经训练好的模型,然后给它提供输入

1.png和jpg格式的图片通道数

(1)png格式的图片是4通道(RGB三通道+透明度通道),jpg格式的图片是3通道(RGB),可以用PIL.Image.convert('RGB')来转换(不同截图软件保留的通道数也不一样)。

(2)transform.Conpose的使用:

Compose()中的参数需要是一个列表:

Compose([transforms参数1,transforms参数2...])

(3)使用案例如下:

点击查看代码
Example:>>> transforms.Compose([>>>     transforms.CenterCrop(10),>>>     transforms.PILToTensor(),>>>     transforms.ConvertImageDtype(torch.float),>>> ])

2.小细节:

将model设置到model.eval(),with torch.no_grad()可以节约内存,提高性能。

(1)model.eval()
model.eval()是PyTorch中模型的一个方法,用于设置模型为评估模式。在评估模式下,模型的所有层都将正常运行,但不会进行反向传播(backpropagation)和参数更新。

(2)torch.no_grad()
torch.no_grad()是PyTorch的一个上下文管理器,用于在不需要计算梯度的场景下禁用梯度计算。在使用torch.no_grad()上下文管理器的情况下,所有涉及张量操作的函数都将不会计算梯度,从而节省内存和计算资源。

3.将在gpu上训练的模型导入到在cup上运行的程序时要添加:

map_location=torch.device('cpu')关键字参数。

(1)读取dog的照片,并利用train里面跑出来的模型dyl_0.pth进行预测
image

(2)代码如下

点击查看代码
import torch
import torchvision
from PIL import Image
from torch import nn# device = torch.device("cuda" if torch.cuda.is_available() else "cpu")img_path =r"D:\DeepLearning\Learn_torch\images\dog.png"
#读取这张图片
image = Image.open(img_path)
print(image)
# image.show()
image = image.convert('RGB')transform = torchvision.transforms.Compose([torchvision.transforms.Resize((32,32)),torchvision.transforms.ToTensor()])image = transform(image)
print(image.shape)class Dyl(nn.Module):def __init__(self):super(Dyl, self).__init__()self.model = nn.Sequential(nn.Conv2d(3,32,5,1,2) ,   #padding为2,之前计算过nn.MaxPool2d(2),nn.Conv2d(32,32,5,1,2),nn.MaxPool2d(2),nn.Conv2d(32,64,5,1,2),nn.MaxPool2d(2),nn.Flatten(),nn.Linear(1024,64),nn.Linear(64,10))def forward(self, x):x = self.model(x)return x
#加载网络模型:
# model = torch.load("dyl_0.pth")
#将在gpu上训练的模型导入到在cup上运行的程序时要添加:map_location=torch.device('cpu')关键字参数
model = torch.load("dyl_0.pth", map_location='cpu')
print(model)
image = torch.reshape(image,(1,3,32,32))
model.eval()
with torch.no_grad():output = model(image)
print(output)
print(output.argmax(1))

(3)它训练的结果不是很准确:

点击查看代码
<PIL.PngImagePlugin.PngImageFile image mode=RGB size=456x336 at 0x2B5F2FF6A90>
torch.Size([3, 32, 32])
Dyl((model): Sequential((0): Conv2d(3, 32, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))(1): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)(2): Conv2d(32, 32, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))(3): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)(4): Conv2d(32, 64, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))(5): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)(6): Flatten(start_dim=1, end_dim=-1)(7): Linear(in_features=1024, out_features=64, bias=True)(8): Linear(in_features=64, out_features=10, bias=True))
)
tensor([[-1.4050, -0.2401,  0.9364,  0.8570,  1.0776,  1.0941,  1.3038,  0.7209,-2.0690, -1.1032]])
tensor([6])

预测结果是tensor([6]),

但是打开P26_train.py的test_data打断点发现CIFAR10中的dog对应的序列是5,而不是6

P31_CIFAR10中dog对应的序列是5

(4)应对措施:
可以多训练几次

例如把epoch训练10轮改成训练30轮,并使用谷歌的gpu来跑模型,保存模型另设(以作区分):

点击查看代码
#8.3用epoch记录训练轮次,训练10轮
epoch = 30#11.保存模型(保存每一轮训练的结果)torch.save(dyl,"dyl_{}_gpu.pth".format(i))

(5)把训练的模型下载到对应文件夹目录
训练了3分钟

把dyl_29_gpu.pth、dyl_28_gpu.pth、dyl_27_gpu.pth和dyl_16_gpu.pth等都下载下来了,

P31_下载dyl_29_gpu模型

(6)打开pycharm,重新指定模型:
我试的是dyl_16_gpu.pth,使得运行成果是tensor([5])即dog

【我试了好几个模型包括dyl_29_gpu.pth,但是预测的效果不是很好,是tensor([2])即预测成了bird】

点击查看代码
#将在gpu上训练的模型导入到在cup上运行的程序时要添加:map_location=torch.device('cpu')关键字参数
#model = torch.load("dyl_0.pth", map_location='cpu')
#重新指定模型:
model = torch.load("dyl_16_gpu.pth", map_location='cpu')

(7)运行成果:
tensor([5])

P31_预测结果为5,即对应dog,正确

(8)把dog换成了airplane 试试:
image
预测airplane得到tensor[0],预测正确:

P31_预测airplane得到tensor0

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

赋能第一期 新员工角色转换主题培训

1、无论是公司组织的还是商院组织的,每一场培训的目的都是为了让我们更快的适应职场,而我们正是通过这一次又一次的培训,达到了量变到质变的效果,积攒了作为员工,如何更好的工作,向上级汇报,先说结论再层次递进…

从技术管理者到战略决策者,揭秘IT技术负责人的四个价值层次,看看您在第几层?

本文将IT团队负责人价值划分为任务执行者、流程优化者、技术战略家、业务共创者四个递进层次,剖析各层次本质与跃迁方法,揭示从被业务驱动到驱动业务的认知转变,为IT负责人成长为战略决策者提供实践指南。文 / Keny…

DS优化建图

线段树优化建图

深入解析:Leetcode 43

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

十一月份《代码大全》观后感二

在学校的作业环境中,我们往往是“乐观主义者”。我们假设用户的输入总是合理的,假设文件总是存在且可读,假设网络永远畅通。这种乐观主义在现实世界中是致命的。《代码大全2》中的“防御式编程”思想,像一盆冷水,…

解读Spring Boot框架中不同位置抛出异常的处理流程

背景知识 对于Java Web开发而言,客户端发起的HTTP请求处理顺序为:Servlet容器 -> Filter -> Servlet -> Interceptor -> Controller,参考:Spring拦截器HandlerInterceptor与Filter方法执行顺序探究。 …

tips:LVGL 定时器触发周期不准确(实际间隔 设定间隔)问题排查与解决方案

问题现象 在使用 LVGL 库开发嵌入式 GUI 时,创建了一个设定为 1 秒(1000ms)触发一次的定时器,但实际观察到定时器回调函数的执行间隔明显超过 1 秒,导致依赖该定时器的功能(如时间显示更新)变得缓慢。 问题根源…

docker离线安装emqx(麒麟aarch64)

最近需要在麒麟系统安装emqx,由于emqx没有麒麟系统的安装包且源码编译依赖版本较难管理,因此采用docker容器化部署,现在回忆总结一下emqx的docker离线部署步骤。这里是麒麟系统离线安装docker和docker-compose的步骤…

云斗学院 NOIP 考前练手公益赛 Round 1 题目分析

应该比CSP-S还简单。 T1 分讨+贪心即可。 T2 简单题,贪心 T3 原题,做过,USACO的题目,大概是只吃 \([l,r]\) 的,然后留一个 \(k\) 最后给一个牛吃。题单里面有。 T4 好玩。 我们假设我们并没有看到数据随机。 题目…

第6章 基于应变的单轴疲劳分析 11

引言 局部应变-寿命法的核心假设是:缺口构件的裂纹形核与小裂纹扩展阶段寿命,与光滑实验室试样在相同循环变形条件(即裂纹起始部位的局部应变控制材料行为)下的寿命一致。如图6.1所示,基于这一概念,若已知试样局…

C++写有一个2D 小游戏(贪吃蛇)

用 C++ 开发游戏需要结合图形库、输入处理、游戏逻辑等模块,以下以2D 小游戏(贪吃蛇)为例,展示 C++ 游戏开发的核心流程,使用跨平台图形库SFML(简单易用,适合入门)。 一、准备工作 1. 安装 SFML 库下载地址:S…

NOIP day -2 笔记

马上NOIP了,写点笔记攒一下rp P2824[排序] 十分巧妙的数据结构题,关键点在于如何正确的处理排序的结果。 直接暴力做显然会被T飞,由此我们需要考虑用一种复杂度更低的方法去标记排序。 对于一个点 \(x\) 做包含 \(x…

专精

要在自己喜欢的方向去专精,专精的本质就是:通过极致的"慢" 和"专注", 在一个狭小的领域里,积攒出能瞬间破解,别人没有的穿透力 比如 哲学 : 哲学史那么大,全研究,可能就是个知道分子,但如…

对比说明Java NIO框架和传统的IO框架的优缺点

Java NIO 框架与传统 IO(BIO)框架的优缺点对比,核心围绕性能、易用性、适用场景展开,以下从双方视角分别分析: 一、传统 IO(BIO)框架的优缺点 优点:API 简单直观,开发成本低BIO 基于 “流” 模型设计(如Inpu…

CF2157C Meximum Array 2

限制分开讨论。 首先对于一个位置,如果两个地方的限制都有,那么填 \(k + 1\),因为此时不能填 \(< k\) 的数,也不能填 \(k\),因此填 \(k + 1\)。 如果什么限制都没有,那当然是填什么无所谓。 重要的就是只有两…

如何在实际项目中选择使用Java NIO框架还是传统IO框架?

在实际项目中选择 Java NIO 框架还是传统 IO(BIO)框架,核心是匹配项目的技术场景、性能需求、开发成本三者的平衡。以下从决策维度、场景分类、选型建议三个层面给出具体方案: 一、核心决策维度 选择前需明确以下关…

AT_fps_24_b 整数の組

生成函数是简单的,列出生成函数 然后对后两个的分母因式分解发现能和前两项消掉,最后是 \([x^n]\frac{1}{(x-1)^2}\)。 还有一种是枚举前两种,然后 \(d\) 跟 \(t=n-a-b\) 模 2 同余,且满足 \(3d\le t\) 所以看 \(\…

详细介绍:【数据结构初阶】单链表

详细介绍:【数据结构初阶】单链表pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&…

第五十篇

今天是11月27号,上了体育和数据结构

每日随笔

今天背了第四单元的英语单词,看了一会《代码大全2》