我想构建一个深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
答案 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个功能,因此需要添加一个额外的尺寸。