Keras序列模型输入形状设置与实际输入shape不匹配报错咨询
错误原因
你给InputLayer传入的input_shape参数格式错误,Keras的输入层input_shape参数仅需要指定单条样本的维度,不需要包含数据集的总样本数维度:
- 你的
X_train_1形状是(2000, 20),其中第一个维度是总样本数,第二个维度是单条样本的特征数 - 你直接传入
X_train_1.shape作为input_shape,Keras会默认在最前面补一个batch维度,最终模型期待的输入形状为(None, 2000, 20)(三维) - 实际训练时每个batch输入的形状是
(batch_size, 20)(比如报错里的(32, 20),是二维),维度不匹配就触发了报错。
修复方法
把input_shape参数修改为单条样本的维度即可,有两种写法可以选:
- 直接指定特征数:
input_shape=(20,) - 取
X_train_1的特征维度:input_shape=X_train_1.shape[1:]
修改后的函数定义开头如下:
def build_model_1(n_hidden = 1, n_neurons = 30, learning_rate = 3e-3, input_shape = X_train_1.shape[1:]):
其他潜在问题提醒
你当前的代码还有两个隐含问题需要调整,避免后续报错:
- 标签如果是1-10的整数编码,没有做one-hot转换的话,需要把损失函数从
categorical_crossentropy换成SparseCategoricalCrossentropy,否则会出现维度不匹配报错 - 你当前给
metrics参数传入的是嵌套列表:先定义了metric = [tf.keras.metrics.Accuracy()],编译时又写了metrics=[metric],多套了一层列表,直接传metrics=metric即可。
内容的提问来源于stack exchange,提问作者user1393214
相关产品推荐
相关产品推荐

