news 2026/3/1 5:42:45

Day42 图像数据与显存

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Day42 图像数据与显存
# 先继续之前的代码 import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader , Dataset # DataLoader 是 PyTorch 中用于加载数据的工具 from torchvision import datasets, transforms # torchvision 是一个用于计算机视觉的库,datasets 和 transforms 是其中的模块 import matplotlib.pyplot as plt # 设置随机种子,确保结果可复现 torch.manual_seed(42) # 1. 数据预处理,该写法非常类似于管道pipeline # transforms 模块提供了一系列常用的图像预处理操作 # 先归一化,再标准化 transform = transforms.Compose([ transforms.ToTensor(), # 转换为张量并归一化到[0,1] transforms.Normalize((0.1307,), (0.3081,)) # MNIST数据集的均值和标准差,这个值很出名,所以直接使用 ]) import matplotlib.pyplot as plt # 2. 加载MNIST数据集,如果没有会自动下载 train_dataset = datasets.MNIST( root='./data', train=True, download=True, transform=transform ) test_dataset = datasets.MNIST( root='./data', train=False, transform=transform ) # 随机选择一张图片,可以重复运行,每次都会随机选择 sample_idx = torch.randint(0, len(train_dataset), size=(1,)).item() # 随机选择一张图片的索引 # len(train_dataset) 表示训练集的图片数量;size=(1,)表示返回一个索引;torch.randint() 函数用于生成一个指定范围内的随机数,item() 方法将张量转换为 Python 数字 image, label = train_dataset[sample_idx] # 获取图片和标签 # 可视化原始图像(需要反归一化) def imshow(img): img = img * 0.3081 + 0.1307 # 反标准化 npimg = img.numpy() plt.imshow(npimg[0], cmap='gray') # 显示灰度图像 plt.show() print(f"Label: {label}") imshow(image) # 打印一张彩色图像,用cifar-10数据集 import torch import torchvision import torchvision.transforms as transforms import matplotlib.pyplot as plt import numpy as np # 设置随机种子确保结果可复现 torch.manual_seed(42) # 定义数据预处理步骤 transform = transforms.Compose([ transforms.ToTensor(), # 转换为张量并归一化到[0,1] transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)) # 标准化处理 ]) # 加载CIFAR-10训练集 trainset = torchvision.datasets.CIFAR10( root='./data', train=True, download=True, transform=transform ) # 创建数据加载器 trainloader = torch.utils.data.DataLoader( trainset, batch_size=4, shuffle=True ) # CIFAR-10的10个类别 classes = ('plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck') # 随机选择一张图片 sample_idx = torch.randint(0, len(trainset), size=(1,)).item() image, label = trainset[sample_idx] # 打印图片形状 print(f"图像形状: {image.shape}") # 输出: torch.Size([3, 32, 32]) print(f"图像类别: {classes[label]}") # 定义图像显示函数(适用于CIFAR-10彩色图像) def imshow(img): img = img / 2 + 0.5 # 反标准化处理,将图像范围从[-1,1]转回[0,1] npimg = img.numpy() plt.imshow(np.transpose(npimg, (1, 2, 0))) # 调整维度顺序:(通道,高,宽) → (高,宽,通道) plt.axis('off') # 关闭坐标轴显示 plt.show() # 显示图像 imshow(image) # 先归一化,再标准化 transform = transforms.Compose([ transforms.ToTensor(), # 转换为张量并归一化到[0,1] transforms.Normalize((0.1307,), (0.3081,)) # MNIST数据集的均值和标准差,这个值很出名,所以直接使用 ]) import matplotlib.pyplot as plt # 2. 加载MNIST数据集,如果没有会自动下载 train_dataset = datasets.MNIST( root='./data', train=True, download=True, transform=transform ) test_dataset = datasets.MNIST( root='./data', train=False, transform=transform ) # 定义两层MLP神经网络 class MLP(nn.Module): def __init__(self): super(MLP, self).__init__() self.flatten = nn.Flatten() # 将28x28的图像展平为784维向量 self.layer1 = nn.Linear(784, 128) # 第一层:784个输入,128个神经元 self.relu = nn.ReLU() # 激活函数 self.layer2 = nn.Linear(128, 10) # 第二层:128个输入,10个输出(对应10个数字类别) def forward(self, x): x = self.flatten(x) # 展平图像 x = self.layer1(x) # 第一层线性变换 x = self.relu(x) # 应用ReLU激活函数 x = self.layer2(x) # 第二层线性变换,输出logits return x # 初始化模型 model = MLP() device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model = model.to(device) # 将模型移至GPU(如果可用) from torchsummary import summary # 导入torchsummary库 print("\n模型结构信息:") summary(model, input_size=(1, 28, 28)) # 输入尺寸为MNIST图像尺寸 class MLP(nn.Module): def __init__(self, input_size=3072, hidden_size=128, num_classes=10): super(MLP, self).__init__() # 展平层:将3×32×32的彩色图像转为一维向量 # 输入尺寸计算:3通道 × 32高 × 32宽 = 3072 self.flatten = nn.Flatten() # 全连接层 self.fc1 = nn.Linear(input_size, hidden_size) # 第一层 self.relu = nn.ReLU() self.fc2 = nn.Linear(hidden_size, num_classes) # 输出层 def forward(self, x): x = self.flatten(x) # 展平:[batch, 3, 32, 32] → [batch, 3072] x = self.fc1(x) # 线性变换:[batch, 3072] → [batch, 128] x = self.relu(x) # 激活函数 x = self.fc2(x) # 输出层:[batch, 128] → [batch, 10] return x # 初始化模型 model = MLP() device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model = model.to(device) # 将模型移至GPU(如果可用) from torchsummary import summary # 导入torchsummary库 print("\n模型结构信息:") summary(model, input_size=(3, 32, 32)) # CIFAR-10 彩色图像(3×32×32) class MLP(nn.Module): def __init__(self): super().__init__() self.flatten = nn.Flatten() # nn.Flatten()会将每个样本的图像展平为 784 维向量,但保留 batch 维度。 self.layer1 = nn.Linear(784, 128) self.relu = nn.ReLU() self.layer2 = nn.Linear(128, 10) def forward(self, x): x = self.flatten(x) # 输入:[batch_size, 1, 28, 28] → [batch_size, 784] x = self.layer1(x) # [batch_size, 784] → [batch_size, 128] x = self.relu(x) x = self.layer2(x) # [batch_size, 128] → [batch_size, 10] return x from torch.utils.data import DataLoader # 定义训练集的数据加载器,并指定batch_size train_loader = DataLoader( dataset=train_dataset, # 加载的数据集 batch_size=64, # 每次加载64张图像 shuffle=True # 训练时打乱数据顺序 ) # 定义测试集的数据加载器(通常batch_size更大,减少测试时间) test_loader = DataLoader( dataset=test_dataset, batch_size=1000, shuffle=False )

@浙大疏锦行

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/28 15:10:38

小白学Python避坑指南:这些错误90%的新手都会犯

前言Python 以其简洁易读的语法,成为了众多新手踏入编程世界的首选语言。然而,即使是看似简单的 Python,在学习过程中也隐藏着许多容易让人犯错的“陷阱”。据统计,90% 的新手在学习 Python 时都会遇到一些常见的错误。本文将为小…

作者头像 李华
网站建设 2026/2/28 0:46:19

基于单片机数字电子钟数码管显示系统Proteus仿真(含全部资料)

全套资料包含:Proteus仿真源文件keil C语言源程序AD原理图流程图元器件清单说明书等 资料下载: 通过网盘分享的文件:资料分享 链接: 百度网盘 请输入提取码 提取码: tgnu 目录 资料下载: Proteus仿真功能 项目文件资料&#…

作者头像 李华
网站建设 2026/2/26 8:36:16

Packet Tracer中交换机远程管理配置指南

从零开始掌握交换机远程管理:Packet Tracer实战全解析你有没有遇到过这样的场景?机房里几十台交换机层层堆叠,每次配置都要插线、开终端、敲命令……一旦设备分布在不同楼层或园区,运维效率直接“断崖式”下滑。这就是为什么远程管…

作者头像 李华
网站建设 2026/2/28 21:15:38

彻底解决Multisim主数据库路径错误的系统级配置流程

彻底解决Multisim主数据库路径错误的系统级修复实战你有没有遇到过这样的情况:刚重装完系统,兴冲冲打开Multisim准备做仿真,结果软件卡在启动界面,弹出一个冷冰冰的提示——“Database not found”?或者更糟&#xff0…

作者头像 李华
网站建设 2026/2/24 4:13:39

别再乱买电竞耳机了!职业选手都在用的“隐藏参数”曝光

花几百上千块买的电竞耳机,却总在决赛圈被敌人绕后偷袭?明明开着7.1环绕声,却连脚步声从左还是右来都分不清?团战沟通时,队友只听见你这边的键盘杂音,关键指令全错过?别再怪自己反应慢&#xff…

作者头像 李华