检查输入时出错:预期 lstm_input 有 3 个维度,但得到的数组形状为 (4, 1)

Posted

技术标签:

【中文标题】检查输入时出错:预期 lstm_input 有 3 个维度,但得到的数组形状为 (4, 1)【英文标题】:Error when checking input: expected lstm_input to have 3 dimensions, but got array with shape (4, 1) 【发布时间】:2021-03-30 12:25:00 【问题描述】:

首先,我知道有很多类似的问题;我已经尝试按照答案的建议去做,但似乎我不知道如何解决它。我有一个Keras Functional API model

lstm_input = keras.layers.Input(shape=(1,4), name='lstm_input')
x = keras.layers.LSTM(50, name='lstm_0')(lstm_input)
x = keras.layers.Dropout(0.2, name='lstm_dropout_0')(x)
x = keras.layers.Dense(64, name='dense_0')(x)
x = keras.layers.Activation('sigmoid', name='sigmoid_0')(x)
x = keras.layers.Dense(1, name='dense_1')(x)
output = keras.layers.Activation('linear', name='linear_output')(x)
model = keras.Model(inputs=lstm_input, outputs=output)

adam = keras.optimizers.Adam(lr=0.0005)
model.compile(optimizer=adam, loss='mse')

当我尝试安装它时,它会跳出这个错误:

ValueError: Error when checking input: expected lstm_input to have 3 dimensions, but got array with shape (4, 1)

这是我给fit的电话:

model.fit(X_aux['X_i'], X[i+1, 0])
# X_aux['X_i'].shape = (4, ) -- it's a numpy array

我试过np.reshape([X_aux['X_i1']], (4,1)),它的新形状是(4, 1),但它不起作用。我该如何解决这个问题?

【问题讨论】:

这能回答你的问题吗? Error when checking model input: expected lstm_1_input to have 3 dimensions, but got array with shape (339732, 29) 【参考方案1】:

确保 X_aux['X-i'] 的 input_shape 是 3 维的。

任何基于 RNN 的层的输入必须是 3 维的,其中每个轴分别对应于 batch_sizetime_stepfeature dimension

整形为(4, 1) 无济于事的原因是整形后的张量仍然是二维的。你需要 3 个。

确保正确定义 batch_sizetime_stepfeature dimension 并重塑 X_aux['X-i'] 并再次重新训练模型。

【讨论】:

以上是关于检查输入时出错:预期 lstm_input 有 3 个维度,但得到的数组形状为 (4, 1)的主要内容,如果未能解决你的问题,请参考以下文章

检查输入时出错:预期 input_1 有 4 个维度,但得到了形状为 (224, 224, 3) 的数组

检查输入时出错:预期 lstm_1_input 有 3 个维度,但得到了形状为 (5, 3) 的数组

ValueError:检查输入时出错:预期 lstm_16_input 有 3 个维度,但得到的数组形状为 (836, 400, 3, 1)

检查输入时出错:预期 flatten_1_input 有 3 个维度,但得到了形状为 (28, 28) 的数组

检查输入时出错:预期 flatten_input 有 3 个维度,但得到了形状为 (None, 100, 100, 1) 的数组

model.predict() == ValueError:检查输入时出错:预期 flatten_input 有 3 个维度,但得到的数组形状为 (1, 2)