🧠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 等现成封装免去手写。