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

TensorFlow神经网络预测代码出现KeyError:0错误的求助

分析与解决 'KeyError: 0' 问题

错误根源拆解

这个KeyError: 0主要来自三个实打实的问题,咱们一个个捋清楚:

  1. CSV数据格式彻底混乱
    你给出的predict.csv把列名和数据硬塞在了同一行,甚至列名里还有空格(比如d 1),这会让pandas读取后生成的DataFrame完全偏离预期。举个例子,你提供的那行数据会被解析成16个列,但你的输入层明明需要15维特征,后续取数据时自然会触发索引错误。

  2. 数据喂入方式完全不符合TensorFlow要求
    你直接把整个DataFrame丢给feed_dict的x参数:x:[predictdataset],这完全不对。x是shape=[None,15]的占位符,需要的是二维数值数组,而不是带列名的DataFrame对象。TensorFlow在解析这种错误输入时,就会抛出KeyError。

  3. 输出层与预测逻辑不匹配
    首先你的输出层居然定义成了tf.placeholder——这本身就错了,输出层应该是网络计算出来的张量,不是占位符。其次你用了softmax+交叉熵,但softmax是给多分类任务用的(输出维度大于1),你这里输出是1维,应该用sigmoid更合理。最后tf.argmax(y4.eval(...),1)对shape=[None,1]的张量毫无意义,因为维度1只有一个元素,argmax永远返回0,逻辑完全不通。


分步解决方法

1. 先把CSV数据改对

把predict.csv改成标准格式:第一行是15个特征列名(别加空格),第二行是对应的数据。比如:

f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15
1,0,0,1,0,0,0,0,0,0,1,0,0,0,1

如果原来的AlAin,Y1...是特征名,务必保证列数刚好是15个,和输入层维度匹配。

2. 修正预测代码的核心逻辑

修改数据读取和喂入的方式,同时别忘了加载训练好的模型(你之前肯定漏了这一步!不然会话里的网络参数都是随机初始值):

import pandas as pd
import tensorflow as tf

# 假设你已经定义好了网络结构:x是输入占位符,y4是网络输出张量
with tf.Session() as sess:
    # 关键步骤:加载训练好的模型参数
    saver = tf.train.Saver()
    saver.restore(sess, "你的模型保存路径")  # 替换成你实际的模型保存路径
    
    # 正确读取CSV
    predictdataset = pd.read_csv('predict.csv')
    # 把DataFrame转换成二维numpy数组,确保是float32类型
    input_data = predictdataset.values.astype('float32')
    # 喂入数据获取预测结果
    # 如果是二分类(输出维度1),直接取输出值
    y_predict = sess.run(y4, feed_dict={x: input_data})
    # 如果是多分类(输出维度>1)再用argmax:
    # y_predict = sess.run(tf.argmax(y4, axis=1), feed_dict={x: input_data})
    print(y_predict)

3. 修正网络输出层的定义(必改)

输出层不能是占位符,得是网络的计算结果,比如:

# 输入层
x = tf.placeholder(tf.float32, [None, 15])
# 隐藏层1
h1 = tf.layers.dense(x, 128, activation=tf.nn.relu)
# 隐藏层2
h2 = tf.layers.dense(h1, 64, activation=tf.nn.relu)
# 隐藏层3
h3 = tf.layers.dense(h2, 32, activation=tf.nn.relu)
# 输出层:二分类用sigmoid,输出维度1
y4 = tf.layers.dense(h3, 1, activation=tf.nn.sigmoid)
# 如果是多分类(比如n类),用softmax,输出维度n
# y4 = tf.layers.dense(h3, n, activation=tf.nn.softmax)

对应的损失函数也要匹配:二分类用tf.nn.sigmoid_cross_entropy_with_logits,多分类用tf.nn.softmax_cross_entropy_with_logits_v2。


额外提醒

  • 训练时的输入特征顺序,必须和预测时CSV的列顺序完全一致,不然预测结果会彻底跑偏。
  • 如果CSV里有非数值型列(比如原来的AlAin),要提前删掉或者做编码处理,TensorFlow只认数值型输入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:39:01