知了AI学习平台Logo知了
🧠AI 冷知识

你知道吗?

这些有趣的 AI 小知识可能让你大吃一惊

🔄
DataLoader的并行术

DataLoader的num_workers参数可以让多个进程同时预取数据,GPU永远不用等CPU。但有个隐藏陷阱:Windows下num_workers>0时必须在if __name__=="__main__":里启动训练,否则会陷入无限递归——这是Windows多进程机制的"特产"。

一句话总结
💡

Dataset 定义单样本获取逻辑,DataLoader 负责批量加载、打乱与多进程并行,二者配合实现高效数据管道。

常见误区

这些坑别踩

✗

误区 1

DataLoader 会自动把数据加载到 GPU。

✓

正确理解

DataLoader 默认产出 CPU 上的 Tensor,需在训练循环中手动 to(device) 搬运到 GPU。

✗

误区 2

num_workers 越大越好。

✓

正确理解

过多 worker 会消耗内存和文件描述符,且启动开销大,需根据 CPU 核数和数据量权衡。

✗

误区 3

自定义 Dataset 不需要实现 __len__ 和 __getitem__。

✓

正确理解

这是 Dataset 的契约要求,必须实现;也可用 TensorDataset 等现成封装免去手写。