动手学深度学习Kaggle实战:预测房价 - 常见报错 TypeError: can‘t convert np.ndarray of type numpy.object_.
这个错误表明在尝试将一个NumPy数组转换为PyTorch张量时遇到了问题。具体来说,`numpy.ndarray`的类型是`numpy.object_`,而PyTorch的`torch.tensor`函数不支持直接从这种类型的数组创建张量。解决方案:使用.astype(float)强制转换为float
目录
1. 具体报错
代码块:
n_train = train_data.shape[0] train_features = torch.tensor(all_features[:n_train].values, dtype=torch.float32) test_features = torch.tensor(all_features[n_train:].values, dtype=torch.float32) train_labels = torch.tensor( train_data.SalePrice.values.reshape(-1, 1), dtype=torch.float32)报错:
TypeError Traceback (most recent call last) Cell In[20], line 2 1 n_train = train_data.shape[0] ----> 2 train_features = torch.tensor(all_features[:n_train].values, dtype=torch.float32) 3 test_features = torch.tensor(all_features[n_train:].values, dtype=torch.float32) 4 train_labels = torch.tensor( 5 train_data.SalePrice.values.reshape(-1, 1), dtype=torch.float32) TypeError: can't convert np.ndarray of type numpy.object_. The only supported types are: float64, float32, float16, complex64, complex128, int64, int32, int16, int8, uint64, uint32, uint16, uint8, and bool.

2. GPT-4的回答
这个错误表明在尝试将一个NumPy数组转换为PyTorch张量时遇到了问题。具体来说,`numpy.ndarray`的类型是`numpy.object_`,而PyTorch的`torch.tensor`函数不支持直接从这种类型的数组创建张量。`numpy.object_`类型的数组通常出现在数组中包含不同数据类型的元素时,这可能是因为数据集中有缺失值或者混合了数值型与非数值型数据。
解决这个问题的方法通常包括确保在转换之前,数组中的所有元素都是PyTorch支持的数据类型。对于这个特定的错误,你可能需要确保`all_features`在填充缺失值(`fillna`)并进行任何必要的类型转换后,不包含任何非数值类型的数据。
这里有几个可能的解决步骤:
- 确保数据类型一致:在将数据转换为PyTorch张量之前,确保`all_features`中的所有数据都是数值型数据。
- 填充缺失值:你已经尝试了用平均值填充缺失值,这是一个好的开始。确保这一步骤在数据类型转换之前完成。
- 转换数据类型:在创建PyTorch张量之前,强制将`all_features`转换为一个支持的数值类型,比如`float32`。
这里是一个更新后的代码示例,其中包括了对数据类型的显式转换:
# 假设 all_features 已经正确地填充了缺失值 # 强制转换为 float32 类型 all_features = all_features.astype(float) n_train = train_data.shape[0] # 现在转换为PyTorch张量不应该有问题 train_features = torch.tensor(all_features[:n_train].values, dtype=torch.float32) test_features = torch.tensor(all_features[n_train:].values, dtype=torch.float32) train_labels = torch.tensor( train_data.SalePrice.values.reshape(-1, 1), dtype=torch.float32)
如果`all_features`中有列不适合转换为浮点数(例如,文本或分类数据),你可能需要进一步处理这些列,比如通过独热编码(one-hot encoding)或移除它们,以确保所有数据都是数值型的。
3. 实测结果
在代码块的开头加上↓
all_features = all_features.astype(float)
问题成功解决

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)