Как настроить сеть LSTM с одним входом и временем 0 для генерации последовательности? - PullRequest
2 голосов
/ 21 апреля 2019

Я установил тренировочный набор с X формы (batch_size, 50) и Y формы (batch_size, 10 (длина последовательности), 10 (выходной вектор)).

В документации Keras ячейки LSTM говорится, что требуется трехмерный ввод, но модели Sequence 2 Sequence работают и делают именно это. Есть ли другой общий способ решения этой задачи?

model = Sequential()
model.add(LSTM(50, input_shape=(50,)))
model.add(TimeDistributed(Dense(10, activation='softmax')))

Я получаю сообщение об ошибке: «ValueError: вход 0 несовместим со слоем lstm_1: ожидаемый ndim = 3, найденный ndim = 2»

Ответы [ 2 ]

1 голос
/ 21 апреля 2019

Это возвращает только последний шаг последовательности, вы должны установить аргумент: return_sequence = True

Для следующей модели:

 model = Sequential()
 model.add(LSTM(50, input_shape=(1, 50), return_sequences=True))
 model.add(TimeDistributed(Dense(10, activation='softmax')))

У меня есть:

Layer (type)                 Output Shape              Param #   
=================================================================
lstm_3 (LSTM)                (None, 1, 50)             20200     
_________________________________________________________________
time_distributed_2 (TimeDist (None, 1, 10)             510       
=================================================================
Total params: 20,710
Trainable params: 20,710
Non-trainable params: 0
_________________________________________________________________

0 голосов
/ 21 апреля 2019

Изменение input_shape на (1, 50) и добавление

model.add(RepeatVector(10, input_shape=(50, )))

как первый слой, исправляет проблему. Дополнительный RepeatVector делает вход видимым для сети на шаге времени.

Хороший обзор сетей Keras LSTM: Как использовать опцию return_sequence и слой TimeDistributed в Keras?

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