不兼容的输入形状

时间:2021-07-05 13:41:30

标签: tensorflow conv-neural-network lstm datashape

我有一个 CNN-LSTM 模型,其中 CNN 模型将形状为 (None, 301,4,1) 作为输入数据并输出形状为 (None, 606) 的数据。为了使 cnn 输出适应 LSTM 的输入,我添加了一个 TimeDistributed 层,它调用 CNN 模型每个窗口大小=100,因此该层的输入形状=(无, 100,301,4,1),然后我们有一些堆叠的 LSTM 层。

这是CNN模型的架构:

enter image description here

这是LSTM模型的架构:

enter image description here

此架构的代码如下:

input_layer1=Input(shape=(301,4,1)) 
... 
merge_layer=Concatenate(axis=1)([global_max_pooling, lambda_14]) 
cnn_model = Model(inputs=  input_layer1, outputs=merge_layer) cnn_model.compile(optimizer=RMSprop(),loss="mean_squared_error",metrics=['mse', 'mae'])

input_lstm = Input(shape=(100,301,4,1)) 
cnn_output = TimeDistributed(cnn_model)(input_lstm) 
... 
output_layer=Dense(1,activation="linear")(lstm3)     
cnn_lstm_model = Model(inputs= input_lstm, outputs=output_layer)
cnn_lstm_model.compile(optimizer=RMSprop(),loss="mean_squared_error",metrics=['mse', 'mae'])

然后只保存了 cnn_lstm_model 模型。

对于训练,这是我的代码:

batchsize=100
epoch=20
cnn_lstm_model.fit(train_data_force_temp_X,data_Y,
               batch_size=batchsize,
               epochs=epoch,
               verbose=1,
               shuffle=True,
               validation_data=(test_data_force_temp_X,test_Y),
               callbacks=[TensorBoard(log_dir="./CNN_LSTM")])

其中 train_data_force_temp_X.shape = (1960, 301, 4, 1) ,PS:1960 是样本数。

但是我有这个问题:

<块引用>

ValueError:输入 0 与层 model_1 不兼容:预期 shape=(None, 100, 301, 4, 1), 找到 shape=(None, 301, 4, 1)

我知道将错误的形状传递给 cnn_lstm_model 但我认为它会首先将数据传递给具有 shape=(None, 301, 4, 1) 的 cnn 模型,然后对于每 100 个 CNN 输出,它将调用时间分布层,继续这个过程,看来我没有正确理解这个过程。

所以我的问题是:

  • 我是否必须先将数据运行到 cnn 模型中,然后进行预测和 然后将这些输出用作 cnn_lstm 模型的输入?

  • 我该如何修复训练过程?

预先感谢您的帮助。

0 个答案:

没有答案