Как я могу сложить LSTM с помощью Keras? - PullRequest
0 голосов
/ 15 февраля 2020

Это спрашивали несколько раз ( здесь и здесь , например).

Моя модель:

    model = Sequential()
    model.add(LSTM(128, input_shape=(10, VECTOR_SIZE), return_sequences=True))
    model.add(TimeDistributed(Dense(VECTOR_SIZE, activation='linear')))
    model.compile(loss='mean_squared_error', optimizer='rmsprop')

Что работает хорошо.

Когда я пытаюсь сложить это:

    model = Sequential()
    model.add(LSTM(128, input_shape=(10, VECTOR_SIZE), return_sequences=True))
    model.add(LSTM(32))
    model.add(TimeDistributed(Dense(VECTOR_SIZE, activation='linear')))
    model.compile(loss='mean_squared_error', optimizer='rmsprop')

Я получаю сообщение об ошибке:

Traceback (most recent call last):
  File "train_tf.py", line 112, in <module>
    main()
  File "train_tf.py", line 89, in main
    model.add(TimeDistributed(Dense(VECTOR_SIZE, activation='linear')))
  File "/Users/shamoon/.local/share/virtualenvs/pytorch-lstm-audio-Pq4zK81J/lib/python3.6/site-packages/keras/engine/sequential.py", line 182, in add
    output_tensor = layer(self.outputs[0])
  File "/Users/shamoon/.local/share/virtualenvs/pytorch-lstm-audio-Pq4zK81J/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py", line 75, in symbolic_fn_wrapper
    return func(*args, **kwargs)
  File "/Users/shamoon/.local/share/virtualenvs/pytorch-lstm-audio-Pq4zK81J/lib/python3.6/site-packages/keras/engine/base_layer.py", line 463, in __call__
    self.build(unpack_singleton(input_shapes))
  File "/Users/shamoon/.local/share/virtualenvs/pytorch-lstm-audio-Pq4zK81J/lib/python3.6/site-packages/keras/layers/wrappers.py", line 197, in build
    assert len(input_shape) >= 3
AssertionError

Предыдущие ответы кажутся такими простыми, но реальность другая.

1 Ответ

1 голос
/ 15 февраля 2020

Вам необходимо установить return_sequences=True для всех повторяющихся слоев в стеке, кроме последнего, поэтому в вашем примере вы должны сделать:

model = Sequential()
model.add(LSTM(128, input_shape=(10, VECTOR_SIZE), return_sequences=True))
model.add(LSTM(32, return_sequences=True))
model.add(TimeDistributed(Dense(VECTOR_SIZE, activation='linear')))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...