You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyTorch IMDb数据集仅返回负样本的问题排查求助

排查IMDb数据集仅获取负样本的问题

问题根源

IMDb数据集的test集默认存储顺序是先全部12500条负样本(标签1),再全部12500条正样本(标签2)。你的代码中先执行batch(2)再调用shuffle(),这会导致shuffle操作仅打乱整个batch的顺序,而非单个样本的顺序。前12500个batch全是负样本,你只取前10个batch,自然只会看到负样本。

修正后的代码

from torch.utils.data import DataLoader
from functools import partial
from torchtext.datasets import IMDB

imdb_datapipe = IMDB(split='test')

labels = {"1": "negative", "2": "positive"}
def process_labels(labels, x):
    return x[1], labels[str(x[0])]


# 调整操作顺序:先打乱单个样本,再按batch分组
imdb_datapipe = imdb_datapipe.map(partial(process_labels, labels))
imdb_datapipe = imdb_datapipe.shuffle()  # 先打乱所有样本的顺序
imdb_datapipe = imdb_datapipe.batch(2)   # 再按batch_size=2分组
imdb_datapipe = imdb_datapipe.rows2columnar(["text", "label"])
imdb_dataloader = DataLoader(imdb_datapipe, batch_size=None)

it = iter(imdb_dataloader)

for _ in range(10):
    sample = next(it)
    for text,label in zip(sample['text'], sample['label']):
        print(f"{label}: {text[:100]}")

补充说明

如果担心shuffle()的默认buffer_size不足以充分打乱数据,可以手动指定更大的buffer值,比如imdb_datapipe.shuffle(buffer_size=10000),不过核心问题还是操作顺序错误,调整顺序后即可获取均衡的正负样本。

内容的提问来源于stack exchange,提问作者Tobias Strauß

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 14:24:55