Добавление полностью связанного слоя после lstm слоя в керасе - PullRequest
0 голосов
/ 31 марта 2019

Я пытаюсь построить модель, используя LSTM, используя keras.Структура модели, которую я хочу построить, описана на рисунке. The first layer is LSTM layer

В keras я знаю, что для создания такого рода слоя LSTM мне нужен следующий код.

model = Sequential()
model.add(LSTM(4, input_shape=(3,1), return_sequences=True))

4 - размер вывода из каждой ячейки LSTM.return_sequence настроить many to many структуру.Но я не знаю, как мне добавить слой Dense, чтобы получать всю информацию из ячеек LSTM и выводить несколько нейронов.Я не знаю даже, возможно ли это или нет.Буду признателен за любую помощь.

Ответы [ 3 ]

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

Этот ответ основан на ответе SimonC.Вы можете добавить слой Flatten.В зависимости от вашей цели, он может иметь различные способы

def model():
    model = Sequential()
    model.add(Dense(128, input_shape = (LSTM_WINDOW_SIZE,1)))
    model.add(LSTM(units=5,
                   return_sequences=True))

    model.add(Dense(1, activation = 'linear'))
    model.add(Flatten())

    model.add(Dense(1))
    return model
LSTM_WINDOW_SIZE = 5
model3 = model()
model3.summary()

или (переместить слой Flatten перед слоем Dense)

def model():
    model = Sequential()
    model.add(Dense(128, input_shape = (LSTM_WINDOW_SIZE,1)))
    model.add(LSTM(units=5,
                   return_sequences=True))
    model.add(Flatten())

    model.add(Dense(1, activation = 'linear'))

    model.add(Dense(1)) # redundant for this model, just for illustration
    return model
LSTM_WINDOW_SIZE = 5
model3 = model()
model3.summary()
0 голосов
/ 31 марта 2019

Вы можете просто добавить плотный слой после слоя LSTM, , не устанавливая для return_sequence значение False (это необходимо только в том случае, если у вас есть второй слой LSTM после другого слоя LSTM). Недавно я сделал модель LSTM, чтобы предсказать некоторые будущие значения, в зависимости от истории этой переменной. Это работало нормально для меня:

def model():
    model = Sequential()
    model.add(Dense(128, input_shape = (LSTM_WINDOW_SIZE,1)))
    model.add(LSTM(units=5,
                   return_sequences=False)
    model.add(Dense(1))
    model.add(Activation('linear'))

return model

Вы можете удалить первый плотный слой, если хотите.

0 голосов
/ 31 марта 2019

Если вы также хотите иметь вывод много-много, вы можете использовать TimeDistributed Плотные слои.Если можно просто посмотреть на последний результат (с последнего временного шага), вы можете удалить return_sequence = True и просто подключить плотный слой (хотя это будет много к одному)

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