83

私は深層学習ライブラリ keras を使用しており、複数の LSTM をうまくスタックしようとしています。以下は私のコードです

model = Sequential()
model.add(LSTM(100,input_shape =(time_steps,vector_size)))
model.add(LSTM(100))

上記のコードは、3 行目でエラーを返しますException: Input 0 is incompatible with layer lstm_28: expected ndim=3, found ndim=2

入力 X は形状 (100,250,50) のテンソルです。Tensorflow バックエンドで keras を実行しています

4

3 に答える 3

145

return_sequences=True出力テンソルがndim=3(つまり、バッチ サイズ、タイムステップ、隠れ状態) になるように、最初のレイヤーに追加する必要があります。

次の例を参照してください。

# expected input data shape: (batch_size, timesteps, data_dim)
model = Sequential()
model.add(LSTM(32, return_sequences=True,
               input_shape=(timesteps, data_dim)))  # returns a sequence of vectors of dimension 32
model.add(LSTM(32, return_sequences=True))  # returns a sequence of vectors of dimension 32
model.add(LSTM(32))  # return a single vector of dimension 32
model.add(Dense(10, activation='softmax'))

から: https://keras.io/getting-started/sequential-model-guide/ (「スタックされた lstm」を検索)

于 2016-10-31T04:27:16.873 に答える
0

次のようなコード例が機能するはずです。

regressor = Sequential()

regressor.add(LSTM(units = 50, return_sequences = True, input_shape = (33, 1)))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 50, return_sequences = True))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 50, return_sequences = True))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 50))
regressor.add(Dropout(0.2))

regressor.add(Dense(units = 1))

regressor.compile(optimizer = 'adam', loss = 'mean_squared_error')

regressor.fit(X_train, y_train, epochs = 10, batch_size = 4096)
于 2020-09-07T11:11:59.443 に答える