如何在 ConvLSTM 模型中使用多层

Asi*_*han 1 conv-neural-network lstm keras

我喜欢使用多层 ConvLSTM 模型来检查我的模型。我的训练数据的形状是

trainX.shape (5000, 200, 4) # testX.shape (2627, 200, 4)
Run Code Online (Sandbox Code Playgroud)

以下是我的工作正常的代码

print('trainX.shape', trainX.shape) # trainX.shape (5000, 200, 4)
print('testX.shape', testX.shape) #  testX.shape (2627, 200, 4)
# reshape into subsequences (samples, time steps, rows, cols, channels)
samples, n_features = trainX.shape[0], trainX.shape[2]
n_steps, n_length = 8, 25
trainX = trainX.reshape((samples, n_steps, 1, n_length, n_features)) # 
print('trainX.shape', trainX.shape) # (5000, 8, 1, 25, 4)
testX = testX.reshape((testX.shape[0], n_steps, 1, n_length, n_features))
print('testX.shape', testX.shape) # (2627, 8, 1, 25, 4)

# define model
model = Sequential()
model.add(ConvLSTM2D(filters=64, kernel_size=(1,3), activation='relu', input_shape=(n_steps, 1, n_length, n_features)))
model.add(Dropout(0.5))
model.add(Flatten())
model.add(Dense(100, activation='relu'))
model.add(Dense(n_outputs, activation='softmax'))   

print(model.summary())
Run Code Online (Sandbox Code Playgroud)

我尝试添加另一个 convlstm2d 层,但出现错误。我想当我们添加另一个图层时,不需要输入形状。以下是我用来添加另一层的代码。

model = Sequential()
model.add(ConvLSTM2D(filters=64, kernel_size=(1,3), activation='relu', input_shape=(n_steps, 1, n_length, n_features)))
model.add(ConvLSTM2D(filters=64, kernel_size=(1,3), activation='relu'))
model.add(Dropout(0.5))
model.add(Flatten())
model.add(Dense(100, activation='relu'))
model.add(Dense(n_outputs, activation='softmax'))  
Run Code Online (Sandbox Code Playgroud)

我收到以下值错误。

ValueError: Input 0 is incompatible with layer conv_lst_m2d_11: expected ndim=5, found ndim=4
Run Code Online (Sandbox Code Playgroud)

Tim*_*lin 5

对于 ConvLSTM(),神经网络的输入形状必须为[samples, timesteps, rows, columns, features].

我可以看到您正确地将数据输入到 ConvLSTM。

尝试使用return_sequences = True在所述第一ConvLSTM2D()return_sequences = Falsesecond ConvLSTM2D()层。

  • return_sequences 返回每个输入时间步的隐藏状态输出。如果设置为 false,则在 Keras 中它仅返回最后一个隐藏状态输出。使用堆叠 LSTM(标准 LSTM)时,需要将 return_sequences 设置为 True,以便下一个 LSTM 具有 3-D 输入。 (2认同)