ValueError:输入0与层lstm_60不兼容:预期ndim = 3,找到的ndim = 2

时间:2020-03-31 09:33:27

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

我想构建一个深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

3 个答案:

答案 0 :(得分:1)

LSTM层的预期输入形状为[batch, timesteps, feature]。您正在传递[batch, timesteps]。您要做的就是传递[batch, timesteps, 1](在右侧扩展尺寸)。您可以这样做:

X_train = X_train[..., None]

答案 1 :(得分:1)

由于您使用的是LSTM,所以我假设您的输入数据是连续的,即您有318个示例,每个示例有39个时间步长?在这种情况下,您应该首先正确调整输入数据的形状,例如:

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

这将使您的X_train重塑为(318, 39, 1)的形状,然后将起作用(仅在我最初的假设正确的情况下)

答案 2 :(得分:1)

只需重塑X_train

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

适合功能之前。

LSTM需要3D数组(批大小,时间步长,功能)。对于您的情况,由于您具有1个功能,因此需要添加一个额外的尺寸。