104_PyTorch 数据心脏:DataLoader 的深度解析与实战

在前面的内容中,我们已经解决了"如何找到数据(Dataset)"和"如何加工数据(Transforms)"的问题。而 DataLoader 则是整条流水线的最后一步,它负责将处理好的数据高效、有序地"打包"并喂给神经网络。

1. 核心概念:Dataset vs DataLoader

  • Dataset:像是一个仓库管理员,它知道每一件货(数据)在哪里,并负责把货取出来。
  • DataLoader:像是一个装卸车队,它从 Dataset 那里取货,然后按批次(Batch)装车,并决定是否要打乱货物的顺序(Shuffle)。

2. DataLoader 的关键参数详解

107_Dataloader使用.ipynb 中,展示了创建 DataLoader 时最常用的几个核心参数:

|-----------------|--------|----------------------------------------------------|
| 参数 | 含义 | 作用 |
| dataset | 数据集对象 | 告诉 DataLoader 从哪个 Dataset 中取数据。 |
| batch_size | 批大小 | 每次打包多少个数据(例如每次取 4 张图)。 |
| shuffle | 是否打乱 | 设置为 True 时,每个训练轮次(Epoch)都会随机打乱数据顺序,增加模型泛化能力。 |
| num_workers | 多进程加载 | 设置加载数据使用的子进程数。在 Windows 系统下设为大于 0 的数可能会报错(通常设为 0)。 |
| drop_last | 是否舍弃尾数 | 如果总数不能被 batch_size 整除,是否舍弃最后余下的不够一个 Batch 的数据。 |


3. 实战演示:如何遍历数据加载器

代码展示了如何利用 torchvision 加载测试集,并使用 DataLoader 进行循环读取:

Python

复制代码
import torchvision
from torch.utils.data import DataLoader

# 1. 准备数据集
test_data = torchvision.datasets.CIFAR10("./dataset", train=False, transform=torchvision.transforms.ToTensor())

# 2. 定义加载器:每次取 4 张图片,打乱顺序
test_loader = DataLoader(dataset=test_data, batch_size=4, shuffle=True, num_workers=0, drop_last=False)

# 3. 在循环中取出数据
for data in test_loader:
    imgs, targets = data # imgs 现在的形状是 [4, 3, 32, 32]
    # 在这里将 imgs 喂给模型训练...

4. 深度理解:Batch 到底是什么?

当你设置 batch_size=4 时,DataLoader 的工作逻辑如下:

  1. 从 Dataset 中依次取出索引为 0, 1, 2, 3 的图片和标签。
  2. 将这 4 张图片堆叠(Stack)成一个大的张量(Tensor)。
  3. 如果图片尺寸是 3 \\times 32 \\times 32,那么这个 Batch 的形状就是 (4, 3, 32, 32)

5. 可视化观察(TensorBoard)

使用 TensorBoard 来观察 DataLoader 输出的效果。通过 writer.add_images,你可以直观地看到每一轮(Epoch)取出的图片是否被成功打乱了顺序。

注意 :如果在创建 test_loader 时设置 shuffle=True,你会发现第一个 Epoch 打印的第一张图和第二个 Epoch 打印的第一张图是不一样的。


总结

DataLoader 是连接数据与模型的纽带。通过合理设置 batch_sizeshuffle,我们可以平衡计算效率与训练效果。

相关推荐
天上路人9 小时前
A59P双波束语音模块:神经网络降噪在远场拾音中的工程实现分析
人工智能·深度学习·神经网络·ai降噪·ai语音·麦克风·回音消除
依然范特东16 小时前
动手学深度学习笔记--卷积层、微调
人工智能·笔记·深度学习
湘美书院--湘美谈教育17 小时前
湘美谈教育湘美书院大湘西文学系列:AI时代的武侠小说怎么写
大数据·人工智能·深度学习·机器学习·生活
Geoking.17 小时前
JSON vs JSONL:从数据格式到 AI Agent 的工程实践
人工智能·深度学习·json
workflower17 小时前
模型中心主义路径
大数据·人工智能·深度学习·机器学习·自动化·制造
王莎莎-MinerU17 小时前
MCP 解决的是工具接入,科研 Agent 还缺的是科学证据接口标准化
开发语言·网络·人工智能·深度学习·pdf·c#·php
MartinYeung518 小时前
[论文学习]MiCA:比LoRA和全参数微调学到更多知识
深度学习·学习·机器学习
满怀冰雪19 小时前
04-Paddle Tensor 基础:形状、数据类型、广播与索引
python·深度学习·神经网络·paddle
学术小白人19 小时前
【倒计时4个月】-AI赋能图像处理与计算机视觉技术国际学术研讨会
网络·人工智能·神经网络·数据分析·光学
AI人工智能+20 小时前
银行回单识别技术通过AI驱动的智能文档理解方案,实现财务处理的革命性升级
深度学习·计算机视觉·自然语言处理·ocr·银行回单识别