CNNモデルが形状(None, 301,4,1)の入力データとして受け取り、形状(None, 606) のデータを出力するCNN-LSTMモデルがあります。cnn 出力を LSTM の入力に適合させるために、 CNN モデルを各 window-size=100 と呼ぶ TimeDistributed Layer を追加したので、この layer の入力 shape= (None, 100,301,4,1)、そしてスタックされたLSTMレイヤーがいくつかあります。
これはCNNモデルのアーキテクチャです。
これはLSTMモデルのアーキテクチャです。
このアーキテクチャのコードは次のとおりです。
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 と互換性がありません: 予想される形状 = (なし、100、301、4、1)、見つかった形状 = (なし、301、4、1)
cnn_lstm_model に間違った形状が渡されたことは理解しましたが、最初に shape=(None, 301, 4, 1) を持つ cnn モデルにデータを渡し、次に 100 個の CNN 出力ごとに時間を呼び出すと考えました層を分散してプロセスを続行しますが、プロセスを正しく理解していないようです。
だから私の質問は:
最初にデータを cnn モデルに実行し、予測を行ってから、それらの出力を cnn_lstm モデルの入力として使用する必要がありますか?
トレーニング プロセスを修正するにはどうすればよいですか?
助けてくれてありがとう。

