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

Keras模型预测时报dense层输入维度不兼容错误求助

报错原因及解决方案

第一段代码(心脏病预测+MNIST混合代码)

核心错误原因

  • 代码逻辑混杂了两个完全无关的任务:前面加载处理了心脏病数据集,中途又加载MNIST手写数字数据集训练了专门适配MNIST的模型。该模型第一层Flatten(input_shape=(28,28))要求输入是28*28的图像,展平后维度为784,你最后传入心脏病预测的样本只有14个特征,维度不匹配直接触发报错。
  • 额外小问题:代码中调用了plt.show()但没有导入matplotlib.pyplot库,运行时也会触发报错。

修正后的可运行代码

import numpy as np
import pandas as pd
import tensorflow as tf
import matplotlib.pyplot as plt

from google.colab import files
uploaded = files.upload()

import io
df=pd.read_csv(io.BytesIO(uploaded['heart.csv']))

# 检查缺失值
df.isna().sum(axis="rows")

from tensorflow.keras.utils import to_categorical

# 拆分特征和标签
y=df["cp"]
x=df.drop("cp",axis="columns")
y=to_categorical(y)

# 类别特征独热编码
x=pd.get_dummies(x,columns=["sex"])

# 可视化
df.hist(figsize=(10,10))
plt.show()

# 构建适配心脏病数据集的模型
from keras.layers import Dense
from keras.models import Sequential

# 输入维度和特征数匹配,x.shape[1]就是当前特征数14
model = Sequential([
        Dense(128,activation='relu', input_shape=(x.shape[1],)),
        tf.keras.layers.Dropout(0.2),
        # 输出维度和y的类别数匹配,y.shape[1]就是cp的类别数
        Dense(y.shape[1], activation='softmax')])

model.compile(loss="categorical_crossentropy",optimizer="adam",metrics=["accuracy"])

# 训练模型
model.fit(x, y, epochs=50)

# 构造预测样本
data=pd.DataFrame({"age":[50],"trestbps":[120],"chol":[350],"fbs":[1],"restecg":[1],"thalach":[150],"exang":[0],"oldpeak":[1.5],"slope":[1],"ca":[0],"thal":[2],"target":[1],"sex_0":[0],"sex_1":[1]})

# 执行预测
print(model.predict(data))

第二段参考代码(泰坦尼克生存预测)

常见报错原因

  • 特征维度不匹配:模型定义的input_shape=(7,)要求输入特征维度为7,如果你调整了特征处理逻辑(比如多删除了列、新增了其他列的独热编码),导致最终X的特征数不是7,就会触发维度不匹配报错。
  • 损失和标签格式不匹配:代码使用categorical_crossentropy损失,要求标签y必须是独热编码后的格式,如果你注释了y=to_categorical(y)这行,直接传入原始1维标签就会报错。

修正方案

  1. 特征处理完成后打印print(X.shape),确认最后一维的特征数,把模型的input_shape参数调整为和实际特征数一致。
  2. 确认标签y已经做了独热编码,或者把损失换成SparseCategoricalCrossentropy就不需要提前做独热编码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:48:03