時系列用にケラスでエンコーダーモデルを開発しようとしています。データの形状は(5039、28、1)です。これは、私のseq_lenが28で、1つの機能があることを意味します。エンコーダーの最初のレイヤーでは、112個のハントを使用しています。2番目のレイヤーには56個あり、デコーダーの入力形状に戻ることができるように、28個のハントを持つ3番目のレイヤーを追加する必要がありました(このオートエンコーダーは再構築することになっています)その入力)。しかし、LSTMレイヤーを相互に接続するための正しいアプローチが何かはわかりません。私の知る限り、RepeatVector
またはreturn_seq=True
を追加できます。次のコードで両方のモデルを確認できます。何が違い、どのアプローチが正しいのでしょうか?
return_sequence=True
を使用した最初のモデル:
inputEncoder = Input(shape=(28, 1))
firstEncLayer = LSTM(112, return_sequences=True)(inputEncoder)
snd = LSTM(56, return_sequences=True)(firstEncLayer)
outEncoder = LSTM(28)(snd)
context = RepeatVector(1)(outEncoder)
context_reshaped = Reshape((28,1))(context)
encoder_model = Model(inputEncoder, outEncoder)
firstDecoder = LSTM(112, return_sequences=True)(context_reshaped)
outDecoder = LSTM(1, return_sequences=True)(firstDecoder)
autoencoder = Model(inputEncoder, outDecoder)
RepeatVector
の2番目のモデル:
inputEncoder = Input(shape=(28, 1))
firstEncLayer = LSTM(112)(inputEncoder)
firstEncLayer = RepeatVector(1)(firstEncLayer)
snd = LSTM(56)(firstEncLayer)
snd = RepeatVector(1)(snd)
outEncoder = LSTM(28)(snd)
encoder_model = Model(inputEncoder, outEncoder)
context = RepeatVector(1)(outEncoder)
context_reshaped = Reshape((28, 1))(context)
firstDecoder = LSTM(112)(context_reshaped)
firstDecoder = RepeatVector(1)(firstDecoder)
sndDecoder = LSTM(28)(firstDecoder)
outDecoder = RepeatVector(1)(sndDecoder)
outDecoder = Reshape((28, 1))(outDecoder)
autoencoder = Model(inputEncoder, outDecoder)