当前位置: 首页 > news >正文

【Day38】

DAY 38 Dataset和Dataloader类

对应5. 27作业

知识点回顾:

  1. Dataset类的__getitem__和__len__方法(本质是python的特殊方法)
  2. Dataloader类
  3. minist手写数据集的了解

作业:了解下cifar数据集,尝试获取其中一张图片 

import numpy as np
import os
import torch
import torch.nn as nn
import torch.optim as optim
import torchvision  # 添加torchvision导入
from torch.utils.data import DataLoader, Dataset
from torchvision import datasets, transforms
import matplotlib.pyplot as plt# 尝试导入tqdm库,如果不可用则使用简单的打印
try:from tqdm import tqdmhas_tqdm = True
except ImportError:has_tqdm = Falseprint("提示: 安装tqdm库可以显示进度条 (pip install tqdm)")print("开始执行脚本...")
print("检查CUDA是否可用:", "可用" if torch.cuda.is_available() else "不可用")# 定义转换器:将图片转换为张量,并归一化
transform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
])print("开始下载CIFAR-10数据集(如果需要)...")
# 下载并加载CIFAR-10数据集
trainset = torchvision.datasets.CIFAR10(root='./data', train=True,download=True, transform=transform)
print("CIFAR-10数据集加载完成!")# CIFAR-10数据集的类别
classes = ('plane', 'car', 'bird', 'cat','deer', 'dog', 'frog', 'horse', 'ship', 'truck')# 定义一个函数来显示和保存图片
def imshow(img, filename=None):# 反归一化img = img / 2 + 0.5# 将张量转换为numpy数组npimg = img.numpy()# 转置维度,从(channels, height, width)变为(height, width, channels)plt.figure()plt.imshow(np.transpose(npimg, (1, 2, 0)))plt.axis('off')  # 不显示坐标轴# 保存图片到文件if filename:plt.savefig(filename)print(f"图片已保存到: {filename}")# 尝试显示图片try:plt.show()except Exception as e:print(f"显示图片时出错: {e}")# 创建保存图片的目录
output_dir = './cifar_images'
os.makedirs(output_dir, exist_ok=True)
print(f"图片将保存在: {output_dir}")# 获取数据集中的第一张图片
image, label = trainset[0]print(f'这是一张{classes[label]}的图片')
# 显示并保存图片
imshow(image, f'{output_dir}/cifar_single_image.png')# 演示Dataset类的特殊方法
print(f'\nCIFAR-10数据集的大小: {len(trainset)}')  # 使用__len__方法
print(f'图片的形状: {image.shape}')  # 形状应该是[3, 32, 32],表示3通道,32x32像素# 演示DataLoader的使用
print("创建DataLoader...")
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4,shuffle=True, num_workers=0)  # 减少worker数量避免潜在问题# 获取一个批次的图片并显示
print("从DataLoader获取一批数据...")
dataiter = iter(trainloader)
images, labels = next(dataiter)# 显示一个批次的图片
print('\n显示一个批次(4张)的图片:')
imshow(torchvision.utils.make_grid(images), f'{output_dir}/cifar_batch_images.png')
print('这些图片的类别是: ', ' '.join('%5s' % classes[labels[j]] for j in range(4)))print("\n脚本执行完成!")
开始执行脚本...
检查CUDA是否可用: 不可用
开始下载CIFAR-10数据集(如果需要)...
Files already downloaded and verified
CIFAR-10数据集加载完成!
图片将保存在: ./cifar_images
这是一张frog的图片
图片已保存到: ./cifar_images/cifar_single_image.pngCIFAR-10数据集的大小: 50000
图片的形状: torch.Size([3, 32, 32])
创建DataLoader...
从DataLoader获取一批数据...显示一个批次(4张)的图片:
图片已保存到: ./cifar_images/cifar_batch_images.png
这些图片的类别是:    dog  deer   dog truck脚本执行完成!

相关文章:

  • SwaggerEndPoints 配置访问外部 Swagger 文档
  • 使用蓝耘元生代 MaaS 平台 API 工作流调用技巧与实践体验
  • 九级融智台阶与五大要素协同的量子化解析
  • 仿盒马》app开发技术分享-- 确认订单页(数据展示)(端云一体)
  • 迪宇电力绝缘胶垫四大优势,用特殊橡胶配方制成,具备多项实用优势
  • Day31 -js应用 -实例:webpack jQuery的使用及其隐含的安全问题
  • MySQL 窗口函数深度解析:语法、应用场景与性能优化
  • 理解vue-cli 中进行构建优化
  • 不同电脑同一个网络ip地址一样吗?如何更改
  • HTML Day02
  • C++—decltype
  • 大模型(5)——编码器(Encoder)、解码器(Decoder)
  • 大模型微调(面经总结)
  • Linux编译器——gcc/g++的使用
  • 实时数仓和离线数仓的区别是什么?企业如何选择合适的数仓架构?
  • 华为云Flexus+DeepSeek征文|ModelArts Studio开通DeepSeek-V3与R1商用服务实践与体验
  • Playwright 常用命令、参数详解及使用示例
  • springboot调用redis数据库,操作字符串
  • Java基础打卡-集合2025.05.22
  • Oracle20200714GI_PSU补丁流程及问题收集
  • wordpress 更改模板路径/重庆seo优化推广
  • 商务网站设计素材/公司品牌宣传方案
  • 品牌的手机网站制作/青岛网站seo分析
  • 山东鲁桥建设有限公司网站/品牌运营公司
  • 中国建设监理协会网站会员专区/推广策略可以分为哪三种
  • 自己做视频网站资源从哪里来/最近一周新闻大事