英译法案例 - 获取数据加载器对象
1 课程概览
本课讲解获取数据加载器对象 get_dataloader。实例化数据集对象,创建 DataLoader(参数:数据集、batch_size、shuffle)。训练集打乱,测试集不打乱。数据加载器返回的是单词对应的索引,不是单词本身。
2 核心概念与定义
- DataLoader:数据加载器,按批次获取数据。
- batch_size:批次大小,实际开发中一般 8、16、32。
- shuffle:是否打乱,训练集打乱,测试集不打乱。
- enumerate:带索引遍历。
3 模型与算法详解
获取数据加载器的步骤
第一步:实例化数据集对象
my_dataset = MyPairsDataset(my_pairs)
第二步:创建数据加载器对象
my_dataloader = DataLoader(
my_dataset,
batch_size=1, # 先用 1,实际开发中 8/16/32
shuffle=True # 训练集打乱
)
| 参数 | 说明 |
|---|---|
| dataset | 数据集对象 |
| batch_size | 批次大小 |
| shuffle | 是否打乱(训练集 True,测试集 False) |
第三步:测试数据加载器
for i, (x, y) in enumerate(my_dataloader):
print(x.shape, x)
print(y.shape, y)
break # 只显示一批数据
数据格式说明
数据加载器返回的是单词对应的索引,不是单词本身。
示例:
- 英文句子:
[16](6 个单词的索引) - 法文句子:
[16](6 个单词的索引) - 内容:
[13, 9, 1105, 1000, ...](单词在词汇表中的索引)
batch_size 说明
| 场景 | batch_size | 说明 |
|---|---|---|
| 测试 | 1 | 一句一句处理 |
| 实际开发 | 8/16/32 | 批次处理 |
4 数学原理与推导
本课为数据加载,无数学原理。
5 代码示例
from torch.utils.data import DataLoader
def get_dataloader(my_pairs, batch_size=1, shuffle=True):
"""
获取数据加载器对象
:param my_pairs: 双语句子对
:param batch_size: 批次大小
:param shuffle: 是否打乱
:return: 数据加载器对象
"""
# 第一步:实例化数据集对象
my_dataset = MyPairsDataset(my_pairs)
# 第二步:创建数据加载器对象
my_dataloader = DataLoader(
my_dataset,
batch_size=batch_size,
shuffle=shuffle
)
return my_dataloader
# 测试
if __name__ == "__main__":
# 假设已有 my_pairs
my_pairs = [
["i am a student", "je suis un étudiant"],
["hello world", "bonjour le monde"],
]
# 获取数据加载器
my_dataloader = get_dataloader(my_pairs, batch_size=1, shuffle=True)
# 测试数据加载器
print("测试数据加载器:")
for i, (x, y) in enumerate(my_dataloader):
print(f"批次 {i}:")
print(f" 英文句子形状: {x.shape}")
print(f" 英文句子内容: {x}")
print(f" 法文句子形状: {y.shape}")
print(f" 法文句子内容: {y}")
# 只显示一批数据
break
print("测试结束")
6 重难点与易错提醒
- ❗重点:DataLoader 三个参数——数据集、batch_size、shuffle。
- ❗重点:训练集打乱(shuffle=True),测试集不打乱(shuffle=False)。
- ⚠️易错:数据加载器返回的是单词对应的索引,不是单词本身。
- ⚠️易错:batch_size 实际开发中一般 8、16、32,测试时用 1。
- 💡深入理解:
enumerate带索引遍历,方便查看批次。
7 课堂问答精选
Q1:get_dataloader 函数做了哪些事?
A:①实例化数据集对象(MyPairsDataset);②创建数据加载器对象(DataLoader,参数:数据集、batch_size、shuffle)。
Q2:DataLoader 的三个参数是什么?
A:①dataset:数据集对象;②batch_size:批次大小(实际开发中 8/16/32,测试时用 1);③shuffle:是否打乱(训练集 True,测试集 False)。
Q3:数据加载器返回的是什么?
A:返回的是单词对应的索引,不是单词本身。例如 [16] 表示 6 个单词的索引,内容如 [13, 9, 1105, 1000, ...]。
Q4:训练集和测试集的 shuffle 有什么区别?
A:训练集打乱(shuffle=True),增加数据随机性,防止模型记忆顺序;测试集不打乱(shuffle=False),保证结果可复现。
8 本课小结
- 步骤:实例化数据集 → 创建 DataLoader → 测试。
- DataLoader 三参数:数据集、batch_size、shuffle。
- 训练集打乱,测试集不打乱。
- 返回的是单词索引,不是单词本身。
- batch_size:测试用 1,实际开发用 8/16/32。
9 延伸思考
- 如何将索引转换为单词?
- 如何处理变长句子?