Почему TimeDistributed не требуется в моем Keras LSTM? - PullRequest
4 голосов
/ 05 апреля 2019

Я знаю, что есть много вопросов к этой теме, но я не понимаю, почему в моем случае возможны оба варианта. Моя форма ввода в LSTM - (10,24,2), а мой скрытый_размер - 8.

model = Sequential()    
model.add(LSTM(hidden_size, return_sequences=True, stateful = True, 
               batch_input_shape=((10, 24, 2))))
model.add(Dropout(0.1))

Почему можно добавить эту строку ниже:

model.add(TimeDistributed(Dense(2))) # Option 1

или этот:

model.add(Dense(2)) # Option 2

Не должно ли Option 2 привести к ошибке компиляции, потому что она ожидает двумерный ввод?

1 Ответ

4 голосов
/ 05 апреля 2019

В вашем случае 2 модели, которые вы определяете, идентичны.

Это вызвано тем, что вы используете параметр return_sequences=True, который означает, что слой Dense применяется к каждому временному шагу, как TimeDistributedDense, но если вы переключитесь на False, тогда 2 моделине идентичны, и возникает ошибка в случае версии TimeDistributedDense, но не в версии Dense.

Более подробное объяснение здесь также относится к аналогичной ситуации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...