本文主要介绍torchvision内置数据集及DataLoader使用
文章目录
- 一、CIFAR10 数据集初识(举例)
- 1.一句话理解
- 2.CIFAR10 数据档案
- 3.数据集下载
- 二、查看数据集内容
- 1.基本操作
- 2.数据结构
- 三、与 transforms 联动
- 四、DataLoader — 从"一副牌"到"一手牌"
- 1.为什么要 DataLoader?
- 2.基本用法
- 五、DataLoader 参数速查表
- 总结
一、CIFAR10 数据集初识(举例)
1.一句话理解
以前要手动写 Dataset 类,现在 torchvision 帮你把常用数据集都封装好了,一行代码下载 + 加载。
2.CIFAR10 数据档案
| 属性 | 数值 |
|---|---|
| 总样本数 | 60,000 张 |
| 训练集 / 测试集 | 50,000 / 10,000 |
| 图像尺寸 | 32×32 像素,RGB 三通道 |
| 类别 | 10 类(飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船、卡车) |
3.数据集下载
importtorchvision animals_transform=torchvision.transforms.Compose([torchvision.transforms.ToTensor()])train_set=torchvision.datasets.CIFAR10(root="./animals",#存在哪train=True,## True=训练集, False=测试集download=True)# 自动下载,已有则跳过test_set=torchvision.datasets.CIFAR10(root="./animals",train=False,download=True)| 参数 | 含义 |
|---|---|
| root | 数据集存放目录 |
| train | True 训练集 / False 测试集 |
| download | True 自动下载 |
| transform | 预处理转换 |
二、查看数据集内容
1.基本操作
代码如下(示例):
# 查看所有类别名print(test_set.classes)# ['airplane', 'automobile', 'bird', 'cat', 'deer',# 'dog', 'frog', 'horse', 'ship', 'truck']# 取第 0 个样本img,target=test_set[0]print(img)# <PIL.Image.Image mode=RGB size=32x32>print(target)# 3(数字标签)print(test_set.classes[target])# 'cat'img.show()# 弹窗显示图片2.数据结构
test_set[0] → (PIL图片, 数字标签)
↓ ↓
32×32 RGB 0~9 整数
三、与 transforms 联动
CIFAR10 给的是 PIL Image,必须转成 Tensor 才能训练。
fromtorchvisionimporttransforms# 定义转换管道dataset_transform=transforms.Compose([transforms.ToTensor()# PIL → Tensor (C, H, W)])# 下载时直接应用 transformtrain_set=torchvision.datasets.CIFAR10(root="./dataset",train=True,transform=dataset_transform,# ← 关键参数download=True)CIFAR10 原始数据 (PIL) ──transform──▶ Tensor (可直接训练)
四、DataLoader — 从"一副牌"到"一手牌"
1.为什么要 DataLoader?
| Dataset(一副牌) | DataLoader(抓牌器) |
|---|---|
| 告诉你总共有多少张牌 | 每次抓多少张(batch_size) |
| 可以一张一张拿 | 是否洗牌(shuffle) |
| 返回 (图片, 标签) | 返回批量 (图片们, 标签们) |
| 模型不吃"一张图",要吃"一批图"。DataLoader 就是那个打包工人。 |
2.基本用法
fromtorch.utils.dataimportDataLoader test_loader=DataLoader(dataset=test_data,batch_size=64,# 一次抓 64 张shuffle=True,# 打乱顺序num_workers=0,# Windows 下必须设为 0drop_last=False# 最后不足 64 张也保留)遍历 DataLoader
forimgs,targetsintest_loader:print(imgs.shape)# torch.Size([64, 3, 32, 32])print(targets.shape)# torch.Size([64])break结合 TensorBoard 可视化
fromtorch.utils.tensorboardimportSummaryWriter writer=SummaryWriter("dataloader_logs")forepochinrange(2):# 跑两轮,观察 shuffle 效果forstep,(imgs,targets)inenumerate(test_loader):writer.add_images(f"Epoch_{epoch}",imgs,step)writer.close()终端输入
tensorboard --logdir=dataloader_logs
五、DataLoader 参数速查表
| 参数 | 作用 | 建议值 |
|---|---|---|
| dataset | 指定数据集 | 必填 |
| batch_size | 每批多少张图 | 32 / 64 / 128 |
| shuffle | 是否打乱 | 训练=True,测试=False |
| num_workers | 多进程加载 | Windows 必须设为 0 |
| drop_last | 丢弃最后不完整的 batch | 一般 False |
总结
本文主要介绍了怎么使用torchvision的数据集以及DataLoader。