当前位置: 首页 > 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脚本执行完成!

http://www.xdnf.cn/news/672391.html

相关文章:

  • C语言_文件操作
  • 【深度学习-Day 18】从SGD到Adam:深度学习优化器进阶指南与实战选择
  • 【JavaSE】枚举和注解学习笔记
  • 高考加油(Python+HTML)
  • 青少年编程与数学 02-020 C#程序设计基础 07课题、控制结构
  • Android设置界面层级为最上层实现
  • 【数据集】EarthExplore下载Landsat LST 数据
  • Java网络编程性能优化
  • 【Vue Vapor Mode :技术突破与性能优化的可能性】
  • 嵌入式学习--江协stm32day1
  • 第9章:网络协议栈与 IoT 通信
  • React 第四十七节 Router 中useLinkClickHandler使用详解及开发注意事项案例
  • React 第四十八节 Router中 useMatch 的使用详细介绍及案例分析
  • React---day2
  • 微服务及容器化设计--可扩展的架构设计
  • Python 中的 for 循环:从基础到高级应用的全面解析
  • WPF【09】WPF基础入门 (三层架构与MVC架构)
  • 沈阳城市空气质量综合评价系统/答辩以及详细讲解
  • 基于cornerstone3D的dicom影像浏览器 第二十四章 显示方位、坐标系、vr轮廓线
  • Python requests
  • App Runner和Task Pipeline中的数据库连接管理指南
  • 【数据结构】树形结构--二叉树
  • U-Boot ARMv8 平台异常处理机制解析
  • Android studio 查看aar源码出现/* compiled code */
  • 基于 MindQuantum 记录线路作用下基底态的变化过程
  • 让jupyter notebook显示目录
  • 大模型应用:开发移动端页面个人中心页面提示词
  • 基于大模型预测视神经脊髓炎的技术方案大纲
  • Ubuntu 20.04 下 OpenCV 4.5.4 编译安装与系统默认 OpenCV 4.2 共存切换指南【2025最新版!!!】
  • Elasticsearch创建快照仓库报错处理