Модели -
Вариант — 3
В этом подходе мы используем сложенные lstms, чтобы мы могли сравнить производительность многоэтапных моделей вывода на основе кодировщика-декодера.
- A
В этом подходе мы используем составные lstms для прогнозирования одношагового вывода.
Архитектура модели выглядит так:
Хотя не имеет особого смысла инициализировать начальные состояния второго lstm последними состояниями первого lstm, но это дало мне несколько лучшие результаты. Вы можете попробовать оба способа.
Код поезда -
Код вывода -
Во время вывода мы перебираем выходные данные модели для того же количества шагов, что и более ранние модели, для справедливого сравнения.
- B
В этом подходе мы используем составные lstms для прогнозирования многоэтапного вывода.
Архитектура модели выглядит так:
Хотя не имеет особого смысла инициализировать начальные состояния второго lstm последними состояниями первого lstm, но это дало мне несколько лучшие результаты. Вы можете попробовать оба способа.
Кроме того, в этой модели шаги ввода и вывода должны быть равными, поскольку второй lstm имеет return_sequences=True.
Код поезда -
Код вывода -
Вариант — 4
Эти модели представляют собой гибрид между предыдущими моделями.
Хотя эти модели медленно сходятся и неэффективны, с их помощью мы можем сравнить производительность многоэтапных моделей вывода на основе кодера-декодера.
- С принуждением учителя
В этом подходе мы используем сложенные lstms вместе с учителем, заставляющим предсказывать многоэтапный вывод.
Код поезда -
Код вывода -
- Без принуждения учителя
В этом подходе мы используем сложенные lstms, не заставляя учителя предсказывать многоэтапный вывод.
Код поезда -
Код вывода -
- Эффективность по функциям и временным шагам
Я исключил из записных книжек анализ производительности каждой функции за шаг времени, чтобы сделать их краткими, но вот как его можно добавить в существующий код:
Здесь gt_list и pred_list — это два списка длины n_out = 5, где каждый элемент представляет собой массив формы — (x,features), где x и характеристики зависят от наших данных, которые в данном случае — (5954, 24).
Таким образом, мы разделили ожидаемый результат и результат, который мы получили от моделей, на отдельные сегменты, соответствующие каждому временному шагу на стороне декодера, для удобства сравнения.
В этом фрагменте кода —
plt.plot(gt_list[i][:,j], c='blue', label="gt") plt.plot(pred_list[i][:,j],c='red', label="pred")
я представляет временные шаги, которые идут от 0–4, а j обозначает функции, которые идут от 0–23. Таким образом, у нас будет 5 * 24 = 120 таких сравнений на модель.
- Будущая работа
Помимо принуждения учителя и обычного подхода, существует еще один метод, который представляет собой комбинацию двух, называемых плановой выборкой, когда в процессе обучения мы подаем значения истинности модели из предыдущих временных шагов в течение начальных эпох и постепенно больше. его прогнозируемых выходов в течение последних эпох.
- Источник данных
- Все части
"Часть 2"
- Github и LinkedIn
https://www.linkedin.com/in/puneet-chandna-050486131/
- Ссылки
https://machinelearningmastery.com/teacher-forcing-for-recurrent-neural-networks/
https://machinelearningmastery.com/develop-encoder-decoder-model-sequence-sequence-prediction-keras/
https://machinelearningmastery.com/how-to-develop-lstm-models-for-time-series-forecasting/
https://machinelearningmastery.com/return-sequences-and-return-states-for-lstms-in-keras/