You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TensorFlow回归教程报错:Unsupported object type int 排查与修复

TensorFlow回归教程代码报错:原因分析与修复方案

我在学习TensorFlow回归教程时,运行教程提供的代码触发报错,代码及报错信息如下:

教程代码

import numpy as np
import pandas as pd

# Make NumPy printouts easier to read.
np.set_printoptions(precision=3, suppress=True)

import tensorflow as tf


print(tf.__version__)

url = 'http://archive.ics.uci.edu/ml/machine-learning-databases/auto-mpg/auto-mpg.data'
column_names = ['MPG', 'Cylinders', 'Displacement', 'Horsepower', 'Weight',
                'Acceleration', 'Model Year', 'Origin']

raw_dataset = pd.read_csv(url, names=column_names,
                          na_values='?', comment='\t',
                          sep=' ', skipinitialspace=True)

dataset = raw_dataset.copy()
dataset = dataset.dropna()
dataset['Origin'] = dataset['Origin'].map({1: 'USA', 2: 'Europe', 3: 'Japan'})
dataset = pd.get_dummies(dataset, columns=['Origin'], prefix='', prefix_sep='')
print(dataset.tail())
train_dataset = dataset.sample(frac=0.8, random_state=0)
test_dataset = dataset.drop(train_dataset.index)

train_features = train_dataset.copy()
test_features = test_dataset.copy()

train_labels = train_features.pop('MPG')
test_labels = test_features.pop('MPG')

print(train_dataset.describe().transpose()[['mean', 'std']])
normalizer = tf.keras.layers.Normalization(axis=-1)
normalizer.adapt(np.array(train_features))

报错信息

Traceback (most recent call last):
  File "/home/don/.config/JetBrains/PyCharm2023.1/scratches/scratch2.py", line 36, in <module>
    normalizer.adapt(np.array(train_features))
  File "/home/don/.local/share/virtualenvs/zero-play-9HEKD3Xj/lib/python3.10/site-packages/keras/layers/preprocessing/normalization.py", line 286, in adapt
    super().adapt(data, batch_size=batch_size, steps=steps)
  File "/home/don/.local/share/virtualenvs/zero-play-9HEKD3Xj/lib/python3.10/site-packages/keras/engine/base_preprocessing_layer.py", line 246, in adapt
    data_handler = data_adapter.DataHandler(
  File "/home/don/.local/share/virtualenvs/zero-play-9HEKD3Xj/lib/python3.10/site-packages/keras/engine/data_adapter.py", line 1260, in __init__
    self._adapter = adapter_cls(
  File "/home/don/.local/share/virtualenvs/zero-play-9HEKD3Xj/lib/python3.10/site-packages/keras/engine/data_adapter.py", line 246, in __init__
    x, y, sample_weights = _process_tensorlike((x, y, sample_weights))
  File "/home/don/.local/share/virtualenvs/zero-play-9HEKD3Xj/lib/python3.10/site-packages/keras/engine/data_adapter.py", line 1140, in _process_tensorlike
    inputs = tf.nest.map_structure(_convert_single_tensor, inputs)
  File "/home/don/.local/share/virtualenvs/zero-play-9HEKD3Xj/lib/python3.10/site-packages/tensorflow/python/util/nest.py", line 917, in map_structure
    structure[0], [func(*x) for x in entries],
  File "/home/don/.local/share/virtualenvs/zero-play-9HEKD3Xj/lib/python3.10/site-packages/tensorflow/python/util/nest.py", line 917, in <listcomp>
    structure[0], [func(*x) for x in entries],
  File "/home/don/.local/share/virtualenvs/zero-play-9HEKD3Xj/lib/python3.10/site-packages/keras/engine/data_adapter.py", line 1135, in _convert_single_tensor
    return tf.convert_to_tensor(x, dtype=dtype)
  File "/home/don/.local/share/virtualenvs/zero-play-9HEKD3Xj/lib/python3.10/site-packages/tensorflow/python/util/traceback_utils.py", line 153, in error_handler
    raise e.with_traceback(filtered_tb) from None
  File "/home/don/.local/share/virtualenvs/zero-play-9HEKD3Xj/lib/python3.10/site-packages/tensorflow/python/framework/constant_op.py", line 103, in convert_to_eager_tensor
    return ops.EagerTensor(value, ctx.device_name, dtype)
ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type int).

原因分析

报错核心是将numpy数组转换为Tensor时失败,根源在于:

  • train_features中同时包含整数类型列(如Cylinders、Model Year以及one-hot编码生成的USA/Europe/Japan列)和浮点类型列
  • 使用np.array(train_features)转换时,numpy会将混合类型的DataFrame转为object dtype的数组
  • TensorFlow无法直接处理object类型的数组,因此触发类型转换错误

教程本身并未过时,但部分代码在新版TensorFlow/pandas组合下会出现类型兼容问题。

修复方案

提供两种简单有效的修复方法:

方法1:直接传入pandas DataFrame给adapt方法

TensorFlow的Normalization.adapt方法支持直接接收pandas DataFrame,无需手动转为numpy数组,修改最后一行代码:

normalizer.adapt(train_features)

方法2:将所有特征转为浮点类型

在生成train_features后,添加一行代码将所有列转为float:

train_features = train_features.astype('float32')
test_features = test_features.astype('float32')

之后再执行normalizer.adapt(np.array(train_features))即可正常运行。

内容的提问来源于stack exchange,提问作者Don Kirkby

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 06:25:25