batch must contain tensors, numbers, dicts or lists; found object:先检查 Dataset 返回值

简介: 该错误源于DataLoader默认collate_fn无法处理`object`类型(如dtype=object的NumPy数组),发生在组批阶段、循环前。需检查`dataset[0]`,将非数值字段转为tensor/ndarray,变长结构须自定义collate_fn。(239字)

原帖在 DataLoader 默认 collate 中失败;还没有进入循环体,也没有调用模型:

TypeError: batch must contain tensors, numbers, dicts or lists; found object

组批发生在循环体之前

原题在 default_collate 递归处理字段时发现 object 类型,此时还未得到 data、target,更没有执行模型。优先绕过 DataLoader 读取单项,再检查哪个字段是 object;更改模型输入层不会改变 Dataset 返回值。

报错的 object 常见于 NumPy object 数组:里面可能是字符串、不等长数组或自定义对象。DataLoader 不负责猜测这些对象该怎样变成规则数值 batch。

设 molecules 是原题传入 DataLoader 的数据集,先绕过 loader 检查一项:

sample = molecules[0]
print("josh050608")
print("sample type:", type(sample))
for i, value in enumerate(sample if isinstance(sample, (tuple, list)) else [sample]):
    print(i, type(value), getattr(value, "shape", None), getattr(value, "dtype", None))

若发现某个 NumPy 数组的 dtype 为 object,再检查其中几项的类型和尺寸。若只是规则数值被错误装进 object 数组,应在 Dataset.getitem 中明确转换成数值 ndarray/Tensor;分类标签单独转成合法类别索引。

若每个分子是不同节点数的图,不能靠 astype(float) 或 torch.stack 强行组批。需要按图模型的约定合并节点/边并记录图归属,或按序列任务定义 padding、长度和 mask,然后编写对应 collate_fn。原帖没有给出 molecules 结构,无法替它指定唯一的组批规则。

先用 num_workers=0 得到完整错误链,验证 dataset[0],再验证两个样本组成一个 batch。组批通过后,batch_idx 是 enumerate 产生的 Python 整数,没有 .shape;应打印 data.shape 或实际字段形状。

完成标准是每个 batch 的字段、尺寸和样本归属符合模型输入,而不只是把 TypeError 捕获后继续训练。

规则数值与变长对象要分两条路

下面的 CPU 合成例子演示规则数值如何在数据入口转换,并展示变长对象为什么要先检查长度。它不定义分子图的组批协议:

import numpy as np
import torch
from torch.utils.data import TensorDataset, DataLoader
raw = np.array([[1., 2.], [3., 4.]], dtype=object)
numeric = raw.astype(np.float32)
dataset = TensorDataset(torch.from_numpy(numeric), torch.tensor([0, 1]))
x, y = next(iter(DataLoader(dataset, batch_size=2)))
assert x.shape == (2, 2) and x.dtype == torch.float32
assert y.tolist() == [0, 1]
ragged = np.empty(2, dtype=object)
ragged[0], ragged[1] = np.arange(2), np.arange(3)
print("regular batch:", x.shape)
print("ragged lengths:", [len(item) for item in ragged])
assert len({
   len(item) for item in ragged}) != 1

规则数据只有确认每个值都能按任务解释为数值后才转换;字符串类别要编码,文本输入要分词,不能统统 astype(float)。变长序列需要 padding、长度或 mask;分子图通常需要节点、边与图归属的专门协议,普通 stack 无法替你定义它。

可先从 dataset 取两个样本,直接调用准备采用的 collate_fn,查看返回字段与样本数量。不要用“丢弃异常样本”或把整个对象列表交给模型来掩盖数据定义缺失。

验收包括样本 ID、目标与变长结构仍正确配对,模型确实能消费组批结果。组批通过后再处理原题 batch_idx.shape 这类独立错误:enumerate 的序号是整数,应查看真实 data 字段。

参考:原始求助帖;技术依据:PyTorch 数据加载(2.5)、torch.from_numpy(2.5)。

相关文章
|
10天前
|
Linux 开发工具 iOS开发
Codex保姆级教程(下载+安装+登录+使用,含所有版本,2026最新)
Codex是OpenAI推出的开源AI编程智能体,本地运行,可理解整个代码库,支持自然语言指令改代码、执行命令、跑测试、修Bug,兼容Win/macOS/Linux。(239字)
4015 20
|
11天前
|
JavaScript API iOS开发
DeepSeek Harness下载、安装、配置一篇搞定(2026整理,送常用插件)
DeepSeek Harness(DSH)是DeepSeek于2026年开源的MIT协议AI Agent框架,支持插件化组装模型、工具、沙箱与UI,兼容主流大模型。本文提供免Node.js的桌面端安装包(Win/macOS),含详细图文教程及热门插件推荐。
4138 49
|
11天前
|
iOS开发 Docker MacOS
【2026实测】Docker Desktop下载、安装、汉化、配置教程(附官网安装包)
Docker Desktop 是 Docker 官方推出的桌面容器管理工具,集成引擎、CLI、图形界面与 Kubernetes,支持 Win/macOS/Linux。2026 最新版 4.88.1 强化 ARM 原生运行、镜像加速及资源可视化,附中文汉化与国内镜像配置指南。
1982 7
|
6天前
|
云安全 人工智能 安全
|
6天前
|
存储 弹性计算 人工智能
2026 年阿里云双十一活动入口攻略,新客服务器优惠通道、三大会场入口梳理
综合来看,2026年阿里云双十一活动入口清晰: 阿里云轻量应用服务器、阿里云ECS云服务器、阿里云GPU云服务器、阿里云百炼大模型服务平台 活动会场、综合权益中心、99计划专场三大入口覆盖服务器、AI权益与续费特价;新用户通过控制台首页banner、权益中心、产品页三处路径进入专属专场,老用户通过控制台弹窗和费用中心权益中心进入老客专区,企业用户做企业实名后解锁专属满减与阶梯折扣。
819 0
|
5天前
|
Linux 开发工具 iOS开发
2026最新codex下载安装保姆级使用教程(下载+安装+登录+使用,含所有历史版本)
本文详解OpenAI Codex国内快速上手指南:提供Win/macOS/Linux全平台免安装包、npm/Homebrew等多方式安装、账号/API Key双登录、简体中文切换,覆盖下载、安装、汉化、使用及高频避坑(如微软商店失败、npm超时等),10分钟即可跑通。
1097 2
|
12天前
|
安全 算法 定位技术
《高性价比人生指南》完整原版:普通人用最少的资源,过好这一生的底层逻辑~How To Live Better
📖《高性价比人生指南》是一份基于实证、拒绝焦虑的生存手册,倡导以“人生时薪”为视角,重新计算时间、金钱与精力的成本与收益。它不承诺逆袭,只教人算清账:省下的钱若耗掉时间便亏;买体验比买物品更值;睡眠是最高杠杆的健康投资;关系贵在情绪价值而非表面热络;学习重在改变行为而非自我安慰。核心理念:用低成本、高回报的微小行动,换取长期的选择权——不是成为谁,而是掌控自己人生的主动权。
2145 6
|
云安全 安全 网络安全
|
24天前
|
人工智能 API 开发工具
DeepSeek Harness 神插件:白嫖 13 家大厂模型
`dsh-our-free-model` 是 DeepSeek Harness 神级插件:零配置、零API Key、零账号,聚合13家大厂免费模型(含DeepSeek V4.1 Flash、Kimi K3等),支持本地网关、用量看板与自动降级,真正实现“白嫖即用”。
4341 58

热门文章

最新文章