ValueError:检查输入时出错:预期 lstm_1_input 具有 3 个维度,但得到的数组具有形状 (393613, 50)

Posted

技术标签:

【中文标题】ValueError:检查输入时出错:预期 lstm_1_input 具有 3 个维度,但得到的数组具有形状 (393613, 50)【英文标题】:ValueError: Error when checking input: expected lstm_1_input to have 3 dimensions, but got array with shape (393613, 50) 【发布时间】:2018-08-03 17:16:34 【问题描述】:

我在 Keras 中有一个错误,我找不到解决方案。我已经搜索了整个互联网,我仍然没有答案^^ 这是我的代码。

model = Sequential()
model.add(LSTM(32, return_sequences=True, input_shape=X.values.shape))
model.add(LSTM(32, return_sequences=True))
model.add(LSTM(32))
model.add(Dense(10, activation="softmax"))
model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=['accuracy'])

错误是第二行。它说“ValueError:检查输入时出错:预期 lstm_1_input 有 3 个维度,但得到了形状为 (393613, 50) 的数组” 我的 Dataframe X 的形状是正确的。 当我尝试训练模型时,会弹出错误

model.fit(X.values, Y.values, batch_size=200, epochs=10, validation_split=0.05)

我希望有人可以帮助我:-)

[编辑] 顺便提一句。这是model.summary()


层(类型)输出形状参数#

lstm_1 (LSTM) (无, 393613, 32) 10624


lstm_2 (LSTM) (无, 393613, 32) 8320


lstm_3 (LSTM) (无, 32) 8320


dense_1(密集)(无,10)330

总参数:27,594 可训练参数:27,594 不可训练参数:0


亲切的问候尼克拉斯。

【问题讨论】:

你能分享X的样本吗? 试试:X_train = np.reshape(X_train, (X_train.shape[0], 1, X_train.shape[1])) pastebin.com/xfKsXUhZ 从这里得到它:***.com/questions/44704435/… 它不起作用 :( 错误:ValueError:必须通过二维输入 【参考方案1】:

在初始化第一层时,您传递 2 个值作为 input_shape =X.values.shape

keras 已经预计每批的行数为 NONE。在运行时,此值由 batch_size=(在您的情况下为 200)确定

所以基本上它在内部将第 1 层的输入形状更改为 NO_OF_FEATURES, NO_OF_ROWS_IN_DATA_SET, NO_OF_ROWS_PER_BATCH

要解决此问题,您只需将 1 个参数作为input_shape 传递,这不是功能。 Keras 已经接受 NONE 作为每批次行数的占位符。

所以input_shape=(X.values.shape[1],) 应该可以解决问题。

model.add(LSTM(32, return_sequences=True, input_shape=(X.values.shape[1],)))

【讨论】:

【参考方案2】:

你犯了两个错误:

    LSTM 处理顺序数据。也就是说 LSTM 的输入数据是 3 维的。在您的第一个 lstm 层中,您设置 input_shape = X.values.shape 这是错误的,因为 input_shape 您必须指定时间步数和特征数,即 input_shape = (num_time_steps,num_features)。您的数组行不是您的时间步长。这些行基本上表示批号。就语法而言,这仍然是正确的,并且在编译代码时不会出现任何错误。

    你必须重塑你的数据集,使其成为 3 维的,即 batch_size、time_step、feature。你可以很容易地使用 numpy.reshape 如下:

    X_train_arr = numpy.reshape(X.values,(X.values.shape[0],1,X.values.shape[1]))

    这是假设您只有一个时间步长。如果你有更多的时间步 你需要做更多的调整。

【讨论】:

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

ValueError:检查输入时出错:预期的dense_26_input具有形状(45781,)但得到的数组具有形状(2,)

ValueError:检查输入时出错:预期 input_1 有 4 个维度,但得到的数组具有形状(无、无、无)

model.fit 给出 ValueError :检查输入时出错:预期的 conv2d 得到了形状为 () 的数组

ValueError:检查输入时出错:预期dense_11_input 具有3 维,但得到了形状为(0, 1) 的数组

ValueError:检查输入时出错:预期 lstm_1_input 具有 3 个维度,但得到的数组具有形状 (393613, 50)

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