You need to enable JavaScript to run this app. Kaggle汽车价格预测实操:TensorFlow转换NumPy数组报不支持int类型错误
优惠活动
大模型
产品
解决方案
定价
更多

Kaggle汽车价格预测实操:TensorFlow转换NumPy数组报不支持int类型错误

汽车价格预测TensorFlow建模报错解决方案

报错核心原因

运行代码时触发Failed to convert a NumPy array to a Tensor (Unsupported object type int),本质是传入模型的特征NumPy数组为混合object类型,无法直接被TensorFlow转换为可计算张量。

代码问题定位

  • 缺失分类特征数值化预处理:所用的汽车价格数据集中包含CarName、fueltype、carbody等多列字符串类分类特征,代码未对这些字段做任何数值编码,就直接通过.values将整表转为NumPy数组,最终得到的数组dtype为object,即便数组内的数值列存储的是整数,也无法通过TensorFlow的类型校验
  • 模型输入维度硬编码错误:代码中固定设置input_shape=(25,),对应未处理的原始特征列数,既没有考虑分类特征编码后的维度变化,也因数组混合类型问题,在维度校验阶段就会连带触发类型转换报错

分步修复方案

  1. 完成所有分类特征的数值转换:通过独热编码、整数映射等方式,将所有字符串特征转为可参与计算的数值列,消除特征中的object类型字段
  2. NumPy数组转换时显式指定TensorFlow兼容的np.float32类型,从根源上避免混合类型问题
  3. 取消硬编码的输入维度设置,根据实际处理完成的特征列数动态指定模型输入形状

修复参考代码

import numpy as np
import pandas as pd
from tensorflow.keras import layers,models

# 读取本地存储的数据集
cars_data=pd.read_csv('/content/CarPrice_Assignment.csv')
# 对所有字符串分类特征做独热编码
categorical_cols = ['CarName', 'fueltype', 'aspiration', 'doornumber', 'carbody', 
                    'drivewheel', 'enginelocation', 'enginetype', 'cylindernumber', 'fuelsystem']
cars_data = pd.get_dummies(cars_data, columns=categorical_cols)

# 拆分训练、测试、验证集,显式指定float32类型
train_data = cars_data.iloc[:103].drop('price', axis=1).values.astype(np.float32)
train_targets = cars_data.price.iloc[:103].values.astype(np.float32)
test_data = cars_data.iloc[103:165].drop('price', axis=1).values.astype(np.float32)
test_targets = cars_data.price.iloc[103:165].values.astype(np.float32)
val_data = cars_data.iloc[165:].drop('price', axis=1).values.astype(np.float32)
val_targets = cars_data.price.iloc[165:].values.astype(np.float32)

# 动态读取特征维度,避免硬编码错误
model=models.Sequential()
model.add(layers.Dense(10,activation='relu',input_shape=(train_data.shape[1],)))
model.add(layers.Dense(8,activation='relu'))
model.add(layers.Dense(6,activation='relu'))
model.add(layers.Dense(1))
model.compile(optimizer='rmsprop',loss='mse',metrics=['mae'])
model.fit(train_data,train_targets,epochs=20,batch_size=1)

实操避坑提示

  • 不要直接将包含字符串列的DataFrame传入TensorFlow模型,这类数据转出的NumPy数组默认是object类型,必然触发张量转换报错
  • 所有传入模型的特征、标签数组,统一转换为np.float32类型,和TensorFlow的默认张量类型对齐,减少不必要的类型转换报错
  • 模型输入维度不要硬编码,直接从训练特征数组的shape中读取,适配不同阶段特征工程调整后的列数变化

内容的提问来源于stack exchange,提问作者Waqar Gul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 00:57:02