使用DataFrame训练Keras模型时输入形状错误的问题求助
解决Keras输入形状不匹配的问题
这个错误的核心原因是你混淆了普通表格数据和序列数据的输入形状定义,咱们一步步来理清楚:
问题分析
你的X_tr是二维数组,形状是(训练样本数, 22)——每个样本是22个特征组成的一维向量,而不是带时间步/序列维度的三维数据。但你在输入层写了shape=(None, 22),这是在告诉模型:每个输入样本是一个可变长度的序列,每个序列元素有22个特征(也就是期望输入是三维的(批次大小, 序列长度, 22)),这和你实际的二维输入完全不匹配,自然会抛出维度错误。
解决方案
把输入层的形状改成(22,)就可以了,这表示每个输入样本是一个22维的一维向量,批次维度会由Keras自动处理。修改后的create_model函数如下:
def create_model(): tfkl = tf.keras.layers # 输入形状改为(22,),对应单个样本的特征维度 inp = tf.keras.Input(shape=(22,)) x = tfkl.Dense(128, activation="linear")(inp) x = tfkl.Dense(64, activation="linear")(x) x = tfkl.Dense(1, activation="linear")(x) model = tf.keras.models.Model(inp, x) model.compile(loss="mae", optimizer="adam", metrics=["mae"]) return model
额外验证小技巧
你可以在创建模型前打印一下数据的形状,确认输入维度:
print("X_tr shape:", X_tr.shape) # 应该输出类似 (xxx, 22) print("单个样本形状:", X_tr[0].shape) # 输出 (22,),这就是输入层要对应的形状
这样调整后,模型就能正确匹配你的输入数据,不会再抛出维度不兼容的错误了。
内容的提问来源于stack exchange,提问作者Long Luu
相关产品推荐
相关产品推荐

