Многоступенчатый временной ряд LSTM Network in pytorch - PullRequest
1 голос
/ 04 апреля 2019

У меня проблемы с функцией LSTM в pytorch. Я использую нейронную сеть LSTM для прогнозирования определенного значения. Входные данные являются многомерными (несколько объектов), а выходные данные должны быть одномерными (только один объект, который необходимо прогнозировать). Я хочу предсказать что-то 1-6 раз заранее. Я также хочу использовать многошаговый ввод. Теперь у меня есть разные способы достижения этого, но ни один из них, похоже, не работает.

Первая создает 6 различных сетей «многие-к-одному», каждая из которых прогнозирует еще один временной интервал за 1-6 часов, но все еще использует рекуррентную структуру (см. Рисунок) при прогнозировании на несколько временных шагов вперед (поэтому не просто смещение целевых данных). на 1-6 часов). Другим вариантом может быть нейронная сеть «многие ко многим», я думаю, это также будет работать нормально. (см. также рисунок)

Мой ввод теперь выглядит так: где сначала группируются различные параметры на одном и том же временном шаге, а затем каждый раз, когда все временные шаги, которые мы хотим использовать в прогнозе, сгруппированы (оглянуться назад)

tensor([[[-0.2800, -0.6381, -0.1033, -0.4941,  0.0016],
         [-0.3159,  0.1378, -0.1010, -0.4529,  0.0016],
         [-0.2800,  0.1378, -0.0963, -0.4706,  0.1150],
         ...,
         [-0.5673, -0.2149, -0.0598, -0.4000,  0.2850],
         [-0.3518, -0.4265, -0.0669, -0.3646,  0.3417],
         [-0.2440, -0.0738, -0.0657, -0.3823,  0.2283]],

        [[-0.3159,  0.1378, -0.1010, -0.4529,  0.0016],
         [-0.2800,  0.1378, -0.0963, -0.4706,  0.1150],
         [-0.7469,  0.1731, -0.0845, -0.4176,  0.3417],
         ...,
         [-0.3518, -0.4265, -0.0669, -0.3646,  0.3417],
         [-0.2440, -0.0738, -0.0657, -0.3823,  0.2283],
         [-0.1722, -0.5323, -0.0610, -0.4117,  0.2283]],

        [[-0.2800,  0.1378, -0.0963, -0.4706,  0.1150],
         [-0.7469,  0.1731, -0.0845, -0.4176,  0.3417],
         [-0.7829, -0.4265, -0.0692, -0.4176,  0.4550],
         ...,
         [-0.2440, -0.0738, -0.0657, -0.3823,  0.2283],
         [-0.1722, -0.5323, -0.0610, -0.4117,  0.2283],
         [-0.1363, -0.8850, -0.0669, -0.4294,  0.1150]],

        ...,

        [[-0.3518,  0.2083, -0.1386,  0.8479, -0.1684],
         [-0.3518,  0.4552, -0.1398,  0.9480,  0.0016],
         [-0.2800, -0.4265, -0.1398,  0.9126,  0.0583],
         ...,
         [-1.0343, -0.1443, -0.1433,  0.8479,  0.0016],
         [-0.8906,  0.3847, -0.1445,  1.0304, -0.2251],
         [-0.7829, -0.0385, -0.1433,  1.0127, -0.1117]],

        [[-0.3518,  0.4552, -0.1398,  0.9480,  0.0016],
         [-0.2800, -0.4265, -0.1398,  0.9126,  0.0583],
         [-0.4596, -0.9202, -0.1410,  0.8479,  0.1150],
         ...,
         [-0.8906,  0.3847, -0.1445,  1.0304, -0.2251],
         [-0.7829, -0.0385, -0.1433,  1.0127, -0.1117],
         [-0.8547,  0.2436, -0.1422,  0.9715, -0.0550]],

        [[-0.2800, -0.4265, -0.1398,  0.9126,  0.0583],
         [-0.4596, -0.9202, -0.1410,  0.8479,  0.1150],
         [-0.6392, -0.5323, -0.1422,  0.8655,  0.0016],
         ...,
         [-0.7829, -0.0385, -0.1433,  1.0127, -0.1117],
         [-0.8547,  0.2436, -0.1422,  0.9715, -0.0550],
         [-0.9984, -0.0033, -0.1422,  0.8597,  0.0583]]])

И вывод выглядит так, что различные временные шаги за 1-6 часов сгруппированы заранее. Я могу легко это изменить.

tensor([[[ -7.],
         [ -9.],
         [-11.],
         [-13.],
         [-13.]],

        [[ -9.],
         [-11.],
         [-13.],
         [-13.],
         [-10.]],

        [[-11.],
         [-13.],
         [-13.],
         [-10.],
         [ -9.]],

        ...,

        [[-12.],
         [-10.],
         [-10.],
         [-10.],
         [ -9.]],

        [[-10.],
         [-10.],
         [-10.],
         [ -9.],
         [ -8.]],

        [[-10.],
         [-10.],
         [ -9.],
         [ -8.],
         [-10.]]])

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

Размер партии не имеет для меня большого значения, я думаю, что сейчас он может быть один.

...