PyTorch DataLoader报TypeError: data must be a sequence (got map)求解
TypeError: new(): data must be a sequence (got map) 报错修复方案
核心原因
该报错与Python 2/3兼容性无关,本质是PyTorch张量构造接口接收到了map类型的不可直接序列化对象,而非预期的列表、元组等序列结构。
排查步骤
- 检查
data_loader.py中Dataset子类的__getitem__方法:若存在直接返回map()处理结果的逻辑,Python 3中map()默认返回迭代器而非序列,需要修改为list(map(处理函数, 输入序列))后再返回或传入张量构造函数。 - 检查JSON数据解析逻辑:若对加载后的JSON字段直接使用
map()做数值转换、归一化等操作,没有显式转为列表就喂给张量构造逻辑,也会触发该错误,补全list()转换即可。 - 检查自定义
collate_fn逻辑:如果自定义了DataLoader的批量拼接函数,需确认批量处理过程中所有传入张量构造的变量都是序列类型,避免直接传入map迭代器。 - 快速验证:在报错栈指向的张量构造代码行前添加
print(type(待转张量的变量)),确认变量类型为map后做显式序列转换即可解决问题。
内容的提问来源于stack exchange,提问作者anmk
相关产品推荐
相关产品推荐

