Должен ли пакетный вход Pytorch LSTM прогнозировать более одного выхода? - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь понять, как Pytorch реализует пакетирование для данных временных рядов с несколькими признаками.Я экспериментирую с биржевыми данными, которые имеют [открытый, закрытый, высокий, низкий, объем] для каждого временного шага.В Keras я мог бы объединить несколько временных шагов вместе и передать их через модель, чтобы получить прогноз следующих временных шагов.например.кормите 10 раз в шаге и прогнозируйте цену в 11 раз.но в pytorch он делает прогноз на каждом временном шаге, хотя я пытаюсь объединить его.Я смотрел учебные пособия по Udacity и читал как можно больше форумов и блогов о Pytorch LSTM, но они, кажется, используют примеры отдельных функций или они подают отдельные буквы для моделей NLP, также используя 1 функцию, которая здесь не применима.

Исходя из того, что я понимаю, если у меня есть данные, которые выглядят так:

data_from_csv = [[time, open, close, high, low, volume],
                 [1,10,11,15,9,100],
                 [2,11,12,16,9,100],
                 [3,12,13,17,9,100],
                 [4,13,14,18,9,100],
                 [5,14,15,19,9,100],
                 [6,15,16,10,9,100]]

Я могу создать скользящее окно, которое принимает несколько временных шагов и группирует их вместе для подачи через LSTM.Я предполагаю, что на данный момент мне нужно уточнить, какими будут следующие термины из документов:

Особенности: Это, например, количество точек данных.[открыть, закрыть, высокий, низкий, объем] или 5 для этого примера?

Input_size: я предполагаю, что это создает узел LSTM для каждой функции или 5 для этого примера?

seq_len:это длина партии?

партия: сколько это партий или длина партии?

Из того, что я понимаю, подача партии с seq_len 2 в LSTM вэтот пример будет выглядеть следующим образом:

создать LSTM с input_size 5 (для скольких объектов), присвоить ему произвольный скрытый размер 10, чтобы удвоить входной размер.И num_layers 1 на данный момент, с batch_first как true (кажется, что это обычная практика) и линейным слоем в конце с выводом 1 для прогноза, который должен выглядеть следующим образом: Модель Lstm с 5 входами и 1 выходом

Если бы я сделал скользящее окно с seq_length 2 из вышеперечисленных данных, оно должно иметь форму (1, 2, 5) для batch_size 1, seq_len 2 и input_size как5. Я могу изменить данные так, чтобы они выглядели следующим образом:

batch_one = [ [ [10,11,15,9,100],
                [11,12,16,9,100] ] ]
batch_two = [ [ [11,12,16,9,100],
                [12,13,17,9,100] ] ]

будет, конечно, больше пакетов (5 для этого примера), так как скользящее окно будет продолжаться до второго, последнего шага, поэтому я могупредсказать 6-го.Я бы тоже сначала нормализовал их, но для примера это не так.Итак, если это форма пакета с seq_length 2 для 5 объектов, я представляю, что он подается в LSTM и получает один прогноз на основе входного пакета с прогнозом следующего открытия:

Lstm с подачей пакета входных данных

Когда я пытаюсь это сделать, я получаю прогноз для каждого временного шага / seq_length вместо каждого пакета, как я делаю в Keras.Это нормально или я кормлю каждый раз, а не делаю партии?Я должен выбросить все, кроме последнего прогноза?Определить ли это поведение в функции forward?

...