У меня проблемы с функцией 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 для многоэтапного прогнозирования. Выходной слой должен быть линейным.
Размер партии не имеет для меня большого значения, я думаю, что сейчас он может быть один.