DAY38 Dataset 类和DataLoader 类

  • Dataset 类

    • __getitem__:实现索引访问(dataset[idx]),用于获取单条数据样本(如图片 + 标签)。
    • __len__:返回数据集的总样本数量,支持 len(dataset)
    • 本质是 Python 的魔法方法,让自定义数据集能像 Python 容器一样被遍历和索引。
  • DataLoader 类

    • 对 Dataset 进行批量加载,支持打乱数据多进程读取自动批处理等功能。
    • 核心参数:batch_size(批次大小)、shuffle(是否打乱)、num_workers(加载进程数)。
    • 作用:高效地为模型训练提供迭代式批量数据。
  • MNIST 手写数据集

    • 经典手写数字图像数据集,包含 0-9 共 10 个类别。
    • 训练集 60000 张,测试集 10000 张,单张图片为 28×28 灰度图。
    • 常用于入门图像分类任务。

🎯 作业:CIFAR 数据集与单张图片获取

1. CIFAR 数据集简介
  • CIFAR-10:包含 10 个类别(飞机、汽车、鸟类、猫、鹿、狗、青蛙、马、船、卡车),训练集 50000 张,测试集 10000 张,单张图片为 32×32 彩色图。
  • CIFAR-100:包含 100 个细分类别,结构与 CIFAR-10 类似,类别更多、难度更大。
2. 代码示例:获取并展示 CIFAR-10 中的一张图片
python 复制代码
import torch
import torchvision.datasets as datasets
import torchvision.transforms as transforms
import matplotlib.pyplot as plt

# 1. 定义数据预处理
transform = transforms.Compose([
    transforms.ToTensor(),  # 转为 Tensor
])

# 2. 加载 CIFAR-10 训练集
train_dataset = datasets.CIFAR10(
    root="./data", train=True, download=True, transform=transform
)

# 3. 获取第 0 张图片与标签
img, label = train_dataset[0]

# 4. 类别名称映射
classes = ('plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck')

# 5. 展示图片
plt.imshow(img.permute(1, 2, 0))  # 将 (C, H, W) 转为 (H, W, C) 以适配 matplotlib
plt.title(f"Label: {classes[label]}")
plt.axis("off")
plt.show()

💡 补充说明

  • permute(1, 2, 0):将 Tensor 的通道维度从 (C, H, W) 调整为 (H, W, C),符合 matplotlib 对图像的输入要求。
  • 若使用 CIFAR-100,只需将 datasets.CIFAR10 替换为 datasets.CIFAR100,并更新类别名称映射即可。
相关推荐
zhangfeng113311 小时前
台大李宏毅老师讲解memba和类似linear atttenion 模型,笔记
开发语言·人工智能·笔记
xiaozhazha_12 小时前
【技术架构】2026企业级AI落地实践:从RPA到AI Agent的原生CRM重构!
人工智能·架构·rpa
火山引擎开发者社区19 小时前
技术速递|使用 GitHub Copilot CLI 构建 Emoji 列表生成器
人工智能
codefan※19 小时前
干掉“幻觉“实战:如何构建企业级知识图谱增强 RAG
人工智能·知识图谱
wukangjupingbb19 小时前
传统基于药物 SMILES 序列和蛋白质氨基酸序列的 DTI(Drug-Target Interaction)预测方法的缺陷
人工智能
沪漂阿龙20 小时前
Codex 额度重置周期变化:AI 编程免费试玩时代正在结束
人工智能
TickDB20 小时前
美股行情 API 接入避坑:REST 快照、WebSocket 推送、盘前盘后数据的边界
人工智能·python·websocket·行情数据 api
装不满的克莱因瓶20 小时前
深入理解卷积神经网络(CNN)——从原理到代码实践
人工智能·神经网络·cnn
完成大叔20 小时前
模块二,Agent知识图谱的工具链思考
人工智能
lauo20 小时前
ibbot手机发布:搭载poplang技术 + token节点经济,革新AI手机体验
人工智能·智能手机