#python #keras #lstm
#python #keras #lstm
Вопрос:
Я пытаюсь построить модель, используя LSTM
using keras
. Структура модели, которую я хочу построить, описана на рисунке.
Я знаю, что в keras для создания такого типа слоя LSTM мне нужен следующий код.
model = Sequential()
model.add(LSTM(4, input_shape=(3,1), return_sequences=True))
4 — это выходной размер каждой ячейки LSTM. return_sequence
настройте many to many
структуру. Но я не знаю, как мне следует добавить плотный слой, чтобы получать всю информацию из ячеек LSTM и выводить несколько нейронов. Я даже не знаю, возможно ли это или нет. Я был бы признателен за любую помощь.
Ответ №1:
Этот ответ основан на ответе SimonC. Вы можете добавить слой выравнивания. В зависимости от вашей цели, у этого могут быть разные способы
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()
Комментарии:
1. Добавление слоя flatten решило мою проблему. Слой Flatten полностью подключен к следующему плотному слою. Спасибо за вашу помощь!
Ответ №2:
Если вы также хотите получить результат «много ко многим», вы могли бы использовать плотные слои с распределением во времени. Если можно просто посмотреть на последний вывод (с последнего временного шага), вы можете удалить return_sequences = True и просто подключить плотный слой (хотя это было бы больше, чем много к одному)
Комментарии:
1. Спасибо, это альтернативная модель, которую я пробую. Но я хочу создать этот. Выходные данные поступают из каждой ячейки LSTM, а затем из полностью подключенного слоя, который получает всю информацию.
Ответ №3:
Вы можете просто добавить плотный слой после вашего слоя LSTM, не устанавливая для ‘return_sequences’ значение 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
Вы можете удалить первый плотный слой, если хотите.
Комментарии:
1. Меня интересует модель, описанная на рисунке, если это возможно.
2. Я не могу дать вам полное задание, поскольку оно было сделано для университетских целей. Могу ли я помочь вам, ответив на дополнительные вопросы?
3. Мой главный вопрос заключается в том, как добавить полностью подключенный слой после слоя lstm, как на картинке, которую я описал. Я даже не уверен, возможно ли это построить. Но задача состоит в том, чтобы найти его.
4.
model = Sequential() model.add(LSTM(4, input_shape=(3,1), return_sequences=True)) model.add(Dense(1))
5. здесь последний плотный слой выдает по одному выводу из каждой ячейки LSTM, но не по одному выводу из всех ячеек LSTM