Вопрос о терминологии, используемой во входах LSTM - seq_length vs context_size для подхода скользящего окна - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть временной ряд последовательности n векторов, которые мне нужно передать в LSTM с помощью скользящего окна.

В различных ресурсах, которые я читаю онлайн, seq_length часто называют длиной окна [или количеством ячеек LSTM], а context_size определяется как размер ввода в LSTM на временном шаге. (например, один входной вектор за шаг).

В любой данный момент времени t я хочу передать LSTM точки x_ {tm},…, x_ {t-1},…, x_ {t} затем следует плотный слой и прогнозировать категориальный целевой атрибут на каждом шаге.

Если я хочу следовать принципу скользящего окна, нужно ли явно разбивать входные данные на окна размером m ?

Например:

[x_ {tm},…, x_ {t-1},…, x_ {t}], [x_ {t-m + 1},…, x_ {t},…, x_ { t + 1}], [x_ {t-m + 2},…, x_ {t + 1}, x_ {t + 2}] и т. д.

Или, можно ли разбить входные данные на непересекающиеся порции [x_ {tm},…, x_ {t-1},…, x_ {t}], [x_ {t + 1}, …, X_ {t + m-1}, x_ {t + m}] и т. Д. И вместо этого измените размер context_size?

     embeds = embeds.unfold(1, context_size, 1)  # Keeping the step size to be 1
     embeds = embeds.view(embeds.size(0), embeds.size(1), -1)

Есть ли лучший способ реализовать метод скользящих окон для данных временных рядов?

1 Ответ

0 голосов
/ 06 ноября 2018

LSTM по умолчанию рекурсивно обращается к данным, так как прогноз в момент времени t будет зависеть от всего прошлого (в зависимости от памяти). В этом случае кажется, что вы хотите, чтобы ввод в момент времени t зависел от m + 1 случаев в прошлом. Вам не нужна рекуррентная сеть, если это так, вы можете просто использовать линейную и подачу в скользящем окне в любой момент. Однако, если вы используете рекуррентную сеть, вам не нужно пропускать одни и те же входы снова и снова.

...