Keras LSTM Paradigm - PullRequest
       7

Keras LSTM Paradigm

0 голосов
/ 26 января 2019

У меня есть один временной ряд, который имеет несколько входных функций и один выход (классификация). Я хотел бы создать модель, которая предсказывала бы результат на каждом этапе.

Мои данные выглядят так:

x: [[0,4, 0,8, -1], [1, 1,6, -0,2], ....]

y: [[1], [0], ...]

Таким образом, когда задан один вектор объектов, я бы хотел, чтобы моя модель выводила 0 или 1. Вектор объектов не является какой-либо последовательностью, поскольку это просто прямой временной ряд.

У меня есть следующие вопросы:

  1. Так как Keras требует, чтобы данные были отформатированы в (batch_size, time_steps, num_features), а я установил num_features = 3, что я должен указать для batch_size и time_steps?

  2. Что мне поставить для значения stateful? Поскольку мои данные расположены в определенном порядке, в котором первое событие в моем списке было первым, а затем второе и третье и т. Д., Я предполагаю, что я положил stateful = True?

Ответы [ 2 ]

0 голосов
/ 27 января 2019

Если вы только начинаете изучать модели LSTM, я рекомендую использовать stateful=False. Как только вы освоитесь с формами ввода и тем, как работает LSTM, вы можете рассмотреть возможность использования stateful=True. Подробнее об этом можно прочитать здесь .

При этом, Keras требует, чтобы данные были отформатированы как (num_samples, time_stepss, num_features). batch_size - это параметр, который вы устанавливаете, когда хотите соответствовать вашей модели. Действительно, и batch_size, и time_steps являются гиперпараметрами, которые вы можете настроить и посмотреть, какой из них приведет к лучшей производительности. Итак, сначала определитесь с time_steps и хотите, чтобы сэмплы имели перекрытия или нет.

Например, вы можете решить создать сэмплы с перекрытием time_steps=4 и 2 time_steps между каждым сэмплом:

x [0], x [1], x [2], x [3] -> y [0], y [1], y [2], y [3]

x [2], x [3], x [4], x [5] -> y [2], y [3], y [4], y [5]

x [4], x [5], x [6], x [7] -> y [4], y [5], y [6], y [7]

...

С time_steps и фиксированным перекрытием вы получите всего num_samples. Затем вы можете подать эти данные в model.fit() с batch_size как 32, 64 и т. Д.

Если вы хотите избежать написания кода для изменения ваших данных, вы можете использовать Keras's TimeseriesGenerator . Обратите внимание, что длина используется для time_steps, а stride определяет перекрытие.

0 голосов
/ 26 января 2019

Я не уверен, но ваш batch_size может быть установлен автоматически, time_steps равно числу наборов функций, поэтому для [[0.4, 0.8, -1]] его 1 для [[0.4, 0.8, -1],[1, 1.6, -0.2]] его 2 и т. Д. Попробуйте изменить ваши данные в (shape [0], 3).

...