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

Keras输入形状不匹配ValueError问题求助

问题解决:输入形状不匹配及代码修正

核心错误原因与修复方案

1. 输入层形状定义错误

你给Dense层的input_shape设置为x_train.shape,而x_train.shape是(621, 17)(621个样本,每个样本17个特征)。Keras中input_shape需要指定单个样本的特征维度,而非整个训练集的形状。这导致模型期望输入是(None, 621, 17)(批量维度+样本维度+特征维度),但实际输入是(None, 17)(批量维度+特征维度),触发形状不匹配错误。

修正:将输入层的input_shape改为(x_train.shape[1],)(即单个样本的特征数17):

model.add(tf.keras.layers.Dense(256, input_shape=(x_train.shape[1],), activation='sigmoid'))

2. 标签数据转换未生效

原代码中y.replace('Yes', 1)和y.replace('No', 0)没有赋值回y,Pandas的replace方法默认返回新对象而不修改原数据,导致y仍然是字符串类型,后续训练会引发额外错误。

修正:将转换后的结果赋值给y:

y = y.replace('Yes', 1).replace('No', 0)

3. Reshape操作未修改原数据

tf.reshape(x_train, [621, 17])不会改变原x_train,因为该函数返回新张量,需要重新赋值才能生效。实际上你的x_train已经是正确的(621, 17)形状,这行代码可以直接删除;若保留则需修改为:

x_train = tf.reshape(x_train, (-1, 17))

修正后的完整代码

import pandas as pd
from sklearn.model_selection import train_test_split
import tensorflow as tf

datasetFull = pd.read_csv('College_Data.csv')
dataset = datasetFull.drop("Name", axis=1)

x = dataset.drop("Private", axis=1)

y = dataset["Private"]
y = y.replace('Yes', 1).replace('No', 0)

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)

print(x_train.shape)

model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Dense(256, input_shape=(x_train.shape[1],), activation='sigmoid'))
model.add(tf.keras.layers.Dense(256, activation='sigmoid'))
model.add(tf.keras.layers.Dense(1, activation='sigmoid'))

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

print(x_train.shape)

model.fit(x_train, y_train, epochs=1000)

关于TensorFlow性能提示

你看到的This TensorFlow binary is optimized...提示仅为性能优化建议,不影响程序功能。若要屏蔽该提示,可在代码开头添加:

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 21:15:25