检查输入时出错:预期 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_size
、time_step
和 feature dimension
。
整形为(4, 1)
无济于事的原因是整形后的张量仍然是二维的。你需要 3 个。
确保正确定义 batch_size
、time_step
和 feature 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)