画像のシーケンスを、_(7338, 225, 1024, 3)
_がサンプルサイズ、_7338
_がタイムステップ、1024 (32x32)
がフラット化された画像ピクセルである形状__225
_のある派手な配列に読み込みました、_3
_チャネル(RGB)。
LSTMレイヤーのあるシーケンシャルモデルがあります。
_model = Sequential()
model.add(LSTM(128, input_shape=(225, 1024, 3))
_
しかし、これはエラーになります:
_Input 0 is incompatible with layer lstm_1: expected ndim=3, found ndim=4
_
documentation は、LSTMレイヤーの入力テンソルは3D tensor with shape (batch_size, timesteps, input_dim)
である必要があると述べていますが、私の場合、_input_dim
_は2Dです。
KerasのLSTMレイヤーに3チャンネル画像を入力するための推奨される方法は何ですか?
画像の数をシーケンスにしたい場合(フレームのある映画のように)、ピクセルとチャンネルをフィーチャーとして配置する必要があります。
_input_shape = (225,3072) #a 3D input where the batch size 7338 wasn't informed
_
3072フィーチャーをLSTMに投入する前にさらに処理が必要な場合は、2D畳み込みとLSTMを組み合わせたり、インターリーブしたりして、より洗練されたモデルを作成できます(ただし、必ずしも優れているわけではありませんが、各アプリケーションには特定の動作があります)。
新しい ConvLSTM2D を使用して、5次元の入力を取得することもできます。
_input_shape=(225,32,32,3) #a 5D input where the batch size 7338 wasn't informed
_
TimeDistributed(Conv2D(...))
を追加し、最後にTimeDistributed(MaxPooling2D(...))
を追加する前に、いくつかのTimeDistributed(Flatten())
とLSTM()
を使用してたたみ込みネットを作成します。これにより、画像の理解とLSTMのパフォーマンスの両方が向上するでしょう。