首页 > 解决方案 > ValueError:检查输入时出错:预期 lstm_6_input 具有形状 (87482, 1) 但得到的数组具有形状 (87482, 3)

问题描述

X_train 数据维度为 87482, 3。

但是使用以下代码运行时出现错误。错误是:

ValueError:检查输入时出错:预期 lstm_6_input 具有形状 (87482, 1) 但得到的数组具有形状 (87482, 3)

我的代码是:

model = Sequential()
#model.add(Embedding(top_words, embedding_vecor_length, input_length=max_review_length))
model.add(LSTM(units=3, input_shape=(X_train_rnn.shape[1],1),return_sequences=True))
model.add(LSTM(3, return_sequences=True))  # returns a sequence of vectors of dimension 32
model.add(LSTM(3))

model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])
print(model.summary())
model.fit(X_train_rnn, y_train, epochs=2, batch_size=32)
# Final evaluation of the model
scores = model.evaluate(X_test_rnn, y_test, verbose=0)

标签: pythonneural-networklstmrecurrent-neural-network

解决方案


input_shape=(X_train.shape[1], 1)应该修复错误,但可能不是整个问题:每个序列有多长

  • LSTM 完整输入形状 ( batch_shape) 是(batch_size, timesteps, channels)- 或者,等价地,(samples, timesteps, features)
  • batch_size=32在您的 中.fit(),但如果X_train维度为(87472, 3),您是否有87472每个长度为 3 ( ) 的样本(序列timesteps=3)?如果是这样,您将需要input_shape=(3, 1)(单变量数据),这就是您得到的(X_train.shape[1], 1)
  • 如果改为你的timesteps=87462,你将需要input_shape=(87462, 3)- 但这是一个非常糟糕的主意,因为 LSTM 正在努力争取timesteps > 0

我不知道形状X_train_rnn有什么,所以我用X_train. 随时澄清。


推荐阅读