【问题标题】:ValueError: Input 0 is incompatible with layer lstm_60: expected ndim=3, found ndim=2ValueError:输入 0 与层 lstm_60 不兼容:预期 ndim=3,发现 ndim=2
【发布时间】:2020-03-31 09:33:27
【问题描述】:

我想构建一个深度 RNN,其中我的 x_train 形状为 (318,39),而我的 y_train 形状为 (318,)。当我执行下面的代码时:

model.add(LSTM(20,input_shape=(X_train.shape[1:]), activation='relu', return_sequences=True))
model.add(LSTM(20, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])
history = model.fit(X_train,y_train,batch_size=20,epochs=250)

我收到以下错误:

ValueError: Input 0 is incompatible with layer lstm_60: expected ndim=3, found ndim=2

【问题讨论】:

  • 发布您的完整代码,以及 X_train、y_train 的形状
  • X_train.shape=(318,39) 和 y_train.shape=(318,)

标签: tensorflow keras deep-learning lstm recurrent-neural-network


【解决方案1】:

由于您使用的是LSTM,我假设您的输入数据是连续的,即您有 318 个示例,其中每个示例有 39 个时间步长?如果是这种情况,您应该首先正确地重塑您的输入数据,例如:

import numpy as np
X_train = np.expand_dims(X_train, -1) 

这会将您的 X_train 重塑为 (318, 39, 1) 的形状,然后它就会起作用(仅当我的初始假设正确时)

【讨论】:

  • 很高兴能帮上忙 :)
【解决方案2】:

LSTM 层的预期输入形状为[batch, timesteps, feature]。你正在传递[batch, timesteps]。你要做的就是通过[batch, timesteps, 1](右边展开维度)。你可以这样做:

X_train = X_train[..., None]

【讨论】:

    【解决方案3】:

    只需重塑 X_train

    X_train.reshape(X_train.shape[0],X_train.shape[1],1)

    前拟合函数。

    LSTM 需要一个 3D 数组(批量大小、时间步长、特征)。在您的情况下,由于您有 1 个功能,因此您需要添加一个额外的维度。

    【讨论】:

      猜你喜欢
      • 2019-06-04
      • 2019-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-13
      • 2019-04-14
      • 2018-09-25
      • 2017-11-18
      相关资源
      最近更新 更多