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

【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.lryc.cn/news/2394977.html

相关文章:

  • HTML Day04
  • 佳能 Canon G3030 Series 打印机信息
  • 云原生安全基石:Kubernetes 核心概念与安全实践指南
  • 图像修复的可视化demo代码
  • autodl 安装了多个conda虚拟环境 选择合适虚拟环境的语句
  • 【AI工具应用】使用 trae 实现 word 转成 html
  • ansible-playbook 进阶 接上一章内容
  • 趋势直线指标
  • 基线配置管理:为什么它对网络稳定性至关重要
  • AWS WebRTC:获取ICE服务地址(part 1)
  • Nest全栈到失业(一):Nest基础知识扫盲
  • 摩尔线程S4000国产信创计算卡性能实战——Pytorch转译,多卡P2P通信与MUSA编程
  • Tesseract OCR 安装与中文+英文识别实现
  • Cypress + React + TypeScript
  • 每个路由器接口,都必须分配所属网络内的 IP 地址,用于转发数据包
  • c++第四课(基础c)——布尔变量
  • 第2期:APM32微控制器键盘PCB设计实战教程
  • Docker-搭建MySQL主从复制与双主双从
  • LeetCode - 203. 移除链表元素
  • canvas 实现全屏倾斜重复水印
  • vue3项目 前端文件下载的两种工具函数
  • SpringAI系列 - 升级1.0.0
  • 5.31 day33
  • Vue3 + VTable 高性能表格组件完全指南,一个基于 Canvas 的高性能表格组件
  • 【七. Java字符串操作与StringBuilder高效拼接技巧】
  • 题解:洛谷 P12672 「LAOI-8」近期我们注意到有网站混淆视听
  • HTML 计算网页的PPI
  • WIN11+eclipse搭建java开发环境
  • Linux 环境下C、C++、Go语言编译环境搭建秘籍
  • MMR-Mamba:基于 Mamba 和空间频率信息融合的多模态 MRI 重建|文献速递-深度学习医疗AI最新文献