数据怎么进模型:Dataset 与 DataLoader
约 10 分钟
模型不直接「看」文件
图片存在文件夹里,模型却只认识数字张量。中间这段「搬运和加工」的活儿,PyTorch 交给两个角色:Dataset 负责「第 i 份数据长什么样」——像仓库管理员,报编号就取货;DataLoader 负责「怎么一批批送」——像传菜员,一次端 32 盘,端之前还帮你把顺序打乱。
为什么一批批送,而不是一口气全送
书里 Fashion-MNIST 有 6 万张图。一口气全算,内存装不下、速度也慢;一次只算一张,又白白浪费 GPU 的并行能力。折中办法就是「小批量」:每次 32 或 64 张。批大小(batch size)是你以后会经常调的第一个旋钮。
打乱顺序这件小事
训练前为什么要 shuffle?想象老师按学号提问,久而久之学生只背自己学号附近的题。数据按类别排好送进去,模型也会「摸出规律」偷懒。打乱顺序,逼它每张图都认真看。
常见误区
- 以为 Dataset 会把所有图片一次读进内存——它是「用时才取」,6 万张大图也扛得住
- 训练集和测试集搞混——测试集是「期末考试卷」,训练时绝不能让模型看到,否则成绩全是假的
练一练:打开书里 Fashion-MNIST 一节,找到 batch_size 这个参数,把它从 256 改成 32 再跑一遍,感受速度变化。
小纸条
数一下自己手机里一个相册有多少张照片,如果 batch_size=64,要分几批送完?
登录 后可看答案