Полностью запутался в сетях LSTM с состоянием и без состояния и соответственно input_shape - PullRequest
0 голосов
/ 29 января 2019

Допустим, у меня есть 2500 временных рядов класса A, каждый из которых имеет 17 временных шагов:

Time series a_1: [0, 1, 2, 3, 4, 3, 2, 1, 2, 3, 4, 3, 2, 1, 2, 3, 4]
Time series a_2: [10,11,12,13,12,11,10,11,12,13,12,11,10,11,12,13,14]
...
Times series a_2500: [3,5,7,5,3,5,7,5,3,5,7,5,3...]

И у меня есть 2500 временных рядов класса B, снова 17 временных шагов:

Time series b_1: [3, 6, 3, 4, 5, 6, 7, 1, 4, 5, 4, 1, 5, 6, 7, 4, 1]
Time series b_2: [12,41,54,64,12,53,12,12,43,21,32,1, 32,31,53,12,1]
...
Time series b_2500: [some more random numbers]

Существует только одна числовая функция для каждого временного ряда, число сверху.Я хочу обучить LSTM, используя Keras, чтобы классифицировать временные ряды в один из двух классов.Они должны быть легко различимы с помощью функций, которые требуют от LSTM понимания корреляции времени между данными, у класса A сезонный характер, а у B - нет.

Моя проблема в том, что разницамежду статическим и полнофункциональным LSTM и как построить input_dimension для сети LSTM.Насколько я понимаю, вход для LSTM определен как (batch_size, time steps, features).Я попытаюсь представить два варианта моделирования этой проблемы, один из которых, как я полагаю, будет «без сохранения состояния», а другой - «с полным состоянием».Если да, какой из них предпочтительнее?А если нет, то какими будут два решения?

Вариант 1 - решение без состояния

Мой X теперь (batch_size,17,1).Это означает, что одна партия содержит несколько временных рядов.

X будет в этом примере:

[
                [[0], [1], [2], [3], [4], [3], [2], ..., [4]] # <- this here is time series a_1
                [[3], [6], [3], [4], [5], [6], [7], ..., [1]] # <- this here is time series b_1
                [[10], [11], [12], [13],          ..., .[14]] # <- this here is time series a_2
                ... # <- continue for all time series for one batch
]

Теперь я могу использовать значение batch_size, равное 32, и обучать мой LSTM, используя разные временные ряды ввремя, и, предсказывая, я могу просто показать ему пакет из одного временного ряда и получить вывод?

Вариант 2 - решение с состоянием

Или мне показатьвременной ряд каждый шаг за раз, так что мой ввод (1,1,1), и я просто показываю его тогда для каждого временного ряда 17 раз за каждый временной шаг одной функции?Затем я бы после вызова одного временного ряда вызвал метод model.reset_states (), чтобы забыть все о новом временном ряду?

Поэтому я использую X [[[0]]] (первый шаг по времени от a_1)), подгоните модель, покажите ее [[[1]]] (второй шаг по времени от a_1), подгоните модель и т. д. Если я достигну последнего временного шага в a_1, я вызываю model.reset_state () и могу продолжить всевременные шаги от b_1?

И для решения с сохранением состояния мне нужно использовать размер пакета 1, потому что, если бы я тренировал его с несколькими временными рядами одновременно, мне всегда приходилось бы позволять ему классифицировать несколько разСерии одновременно во время прогнозирования, поэтому я не могу использовать другой размер партии во время обучения и тестирования?

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