numpy数组转PyTorch时出现numpy.object_类型不支持错误如何解决
问题根因
- 核心报错原因:传入
torch.from_numpy()的inputs_array是dtype为numpy.object_的numpy数组,PyTorch的from_numpy方法仅支持固定长度的数值/布尔类型numpy数组转换,不支持object类型。object类型数组一般是因为数组内存储的元素类型不统一(比如混了字符串、数字、空值、不等长序列),numpy无法识别为统一数值类型才会标记为object。 - 代码本身存在语法错误:
inputs = torch.from_numpy(inputs_array),float()这行的,float()写在了函数括号外面,实际执行后会生成一个包含两个元素的元组,完全没有实现张量类型转换的逻辑。
解决步骤
- 先校验数组类型:执行
print(inputs_array.dtype)确认类型,若输出为object先处理数组内容:- 排查数组内是否存在非数值内容(比如字符串、空值、异常值),清理或编码为数值;
- 如果数组内是不等长序列(比如文本序列、不同长度的时间序列),先做padding对齐成统一长度,保证所有元素维度一致。
- 将处理后的numpy数组显式转换为PyTorch支持的数值类型,推荐优先转成模型训练常用的
float32:inputs_array = inputs_array.astype("float32") - 修正代码语法错误,选择以下任意一种正确写法完成转换:
写法1(numpy侧完成类型转换,转换后的tensor和原numpy数组共享内存,效率更高):
写法2(先转tensor再调整浮点类型):inputs = torch.from_numpy(inputs_array)inputs = torch.from_numpy(inputs_array).float()
注意:如果object数组内存储的是纯字符串类非数值内容,不能直接astype转数值,需要先通过词嵌入、编码等方式把内容映射为数值后再做转换。
内容的提问来源于stack exchange,提问作者Laiba Riaz
相关产品推荐
相关产品推荐

