PyTorch中DataLoader长度与对应Dataset不符问题求助
问题原因解析
你混淆了DataLoader的长度含义——它的长度代表数据迭代时的批次数量,并非样本总数,你的数据集拆分本身没有问题。
具体验证
- 样本总数确认:
1026 + 257 = 1283,和你拆分时的计算逻辑(1283*0.8≈1026,1283*0.2≈256.6,加1后取257)完全匹配,拆分后的样本数量是正确的。 - 反推
batch_size:- 训练集:1026个样本对应257个批次,说明你的
batch_size=4——256个批次各含4个样本,最后1个批次含2个样本(DataLoader默认drop_last=False,不会丢弃不足批次的样本),总批次为256+1=257。 - 验证集:257个样本对应65个批次,同理是64个批次各含4个样本,最后1个批次含1个样本,总批次为
64+1=65,和你的输出完全吻合。
- 训练集:1026个样本对应257个批次,说明你的
查看真实样本数的方法
如果要确认DataLoader对应的样本总数,可以用以下代码统计:
# 统计训练集总样本数 total_train = sum(len(batch) for batch in loader_train) # 统计验证集总样本数 total_val = sum(len(batch) for batch in loader_val) print(total_train, total_val)
运行后会输出1026 257,和拆分后的样本数一致。
拆分数据集的严谨写法
为避免手动计算的整数误差,建议用以下方式拆分,确保两个子集长度之和等于原数据集长度:
train_size = int(0.8 * len(dataset)) val_size = len(dataset) - train_size dataset_train, dataset_valid = random_split(dataset, [train_size, val_size])
内容的提问来源于stack exchange,提问作者Lorewalker Cho
相关产品推荐
相关产品推荐

