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

Keras sequential模型训练报错:期望1个输入却收到2个输入张量怎么解决

问题修复方案

核心错误原因

  • 输入格式不匹配:你通过dict(dataframe)构造数据集时,将floorArea、bedrooms两个特征拆成了两个独立的(None,1)张量传给模型,但你定义的Sequential是单输入模型,期望接收的是拼接后的形状为(None, 2)的单个特征张量,因此触发输入数量不匹配的报错。
  • 损失函数与任务不匹配:当前是房价预测的回归任务,你误用了二分类任务的binary_crossentropy损失,同时accuracy是分类任务指标,回归场景下无参考价值。
  • 输出层激活函数错误:回归任务输出为连续数值,输出层不应使用relu激活,否则会截断负向预测值,影响拟合效果。

修复代码

1. 调整数据集构造逻辑

不要将特征转为字典输入,直接传入特征矩阵即可:

def dataframe_to_dataset(dataframe):
    dataframe = dataframe.copy()
    labels = dataframe.pop("value")
    # 直接传入DataFrame的数值矩阵,自动拼接为(样本数, 2)的特征张量
    ds = tf.data.Dataset.from_tensor_slices((dataframe.values, labels))
    ds = ds.shuffle(buffer_size=len(dataframe))
    return ds

2. 调整模型结构与编译配置

适当调大隐藏层神经元数量提升拟合能力,修改损失和指标适配回归任务:

model = models.Sequential()
# 隐藏层神经元可根据效果调整,原2个神经元拟合能力过弱
model.add(layers.Dense(16, activation='relu', input_shape=(2,)))
model.add(layers.Dense(8, activation='relu'))
# 回归任务输出层无需激活函数,默认使用线性激活
model.add(layers.Dense(1))

# 使用回归任务对应的损失和评估指标
model.compile(optimizer="adam", loss="mse", metrics=["mae"])

修改完成后直接运行原有训练逻辑即可正常训练。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 08:24:00