TensorFlow函数式API模型无法训练,Sequential模型可正常运行
问题分析与解决
核心错误
你定义函数式API输入时,错误地将整个训练集的完整形状(包含样本数5761)传给了keras.Input的shape参数。Keras要求shape仅需指定单样本的特征形状,样本数量维度会由训练时的批次自动处理(默认用None占位)。
已知X_train.shape=(5761, 2, 1),其中5761是总样本数,(2,1)才是单样本的特征形状。但你写了inputs = keras.Input(shape=X_train.shape),导致模型期望输入形状为(None, 5761, 2, 1),而实际训练时每个批次的形状是(16, 2, 1),两者不匹配引发报错。
修正后的函数式API代码
将shape参数改为单样本的特征形状,即取X_train.shape中除样本数外的部分:
inputs = keras.Input(shape=X_train.shape[1:]) # 单样本形状为(2,1) x = inputs x = layers.Dense(64, activation="relu")(x) x = layers.Dense(64, activation="relu")(x) outputs = layers.Dense(1)(x) model = keras.Model(inputs=inputs, outputs=outputs)
额外优化建议
- Sequential模型能正常运行,是因为它会在首次喂入数据时自动推断输入形状,无需显式指定。
- 你的任务是回归任务(使用MSE损失),函数式API编译时用
metrics=['accuracy']不合适,建议和Sequential模型保持一致,使用MAE作为指标:
from tensorflow.keras.optimizers import Adam adam = Adam(lr=0.001) model.compile(optimizer=adam, loss='mse', metrics=['mae'])
内容的提问来源于stack exchange,提问作者LMol
相关产品推荐
相关产品推荐

