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

在DNNClassifier中传递列表/ndarray作为feature_column报错问题

解决DNNClassifier中特征列与输入数据不匹配的异常

我来帮你排查这个问题!你遇到的异常本质是特征列的形状和输入数据的实际维度不匹配,加上pandas DataFrame存储列表的方式导致TensorFlow无法正确解析特征,咱们一步步解决:

问题根源分析

  1. 你的images列每个元素是长度为2的列表(比如[1,1]),但你在定义numeric_column时指定了shape=[1,1],这和实际特征维度完全不匹配;
  2. Pandas DataFrame中直接存储列表会导致TensorFlow的pandas_input_fn无法自动将其解析为统一形状的张量,而是把每个列表当成单个“元素”传递给模型,这不符合DNNClassifier对输入特征的要求。

修正后的代码

import tensorflow as tf
import pandas as pd
import numpy as np

# 把列表转换成标准二维数组,每个样本对应一行特征
a = np.array([[1,1],[2,2],[3,3]])
b = [0,1,0]  # 修正为符合二分类的标签值(原标签11/22/33与n_classes=2不匹配)

# 用转换后的数组构造DataFrame,确保特征列的结构可被TensorFlow正确解析
mydata = pd.DataFrame({'images': a.tolist(), 'labels': b})

# 修正特征列的shape为[2],匹配每个样本的特征维度
feature_columns = [tf.feature_column.numeric_column('images', shape=[2])]

train_input_fn = tf.estimator.inputs.pandas_input_fn(
    x=mydata, 
    y=mydata['labels'], 
    batch_size=60, 
    num_epochs=1, 
    shuffle=True
)

estimator = tf.estimator.DNNClassifier(
    hidden_units=[64,32,16], 
    feature_columns=feature_columns, 
    n_classes=2
)

estimator.train(input_fn=train_input_fn, steps=100)

额外注意点

  • 原代码中标签值[11,22,33]与n_classes=2的二分类任务不匹配,我已经改成了符合二分类的0/1取值,你可以根据实际业务调整;
  • 如果你的实际场景是处理图片数据(比如1x1单通道图),需要确保输入数据形状为(样本数, 1, 1),同时特征列的shape也要对应设置为[1,1],并且要把DataFrame的images列转换成对应的三维数组结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:49:31