LSTM keras очень плохой прогноз после тренировки, что я делаю не так?
Имеется нейронка, построена на библиотеках tf, keras с одним LSTM слоем, 1 полносвязным и 1 выходным
размерность входных данных (N, 100, 2)
размерность выходных данных (1, 2)
Кода подаю тестовый набор (N, 100, 2) и валидационный (N, 2) сетка как бы справляется графики походят, но как быть с прогнозом за пределы датасета я не смогу сформировать N количество данных так как мне о них не известно.
Сделал так взял последние по сто значений с каждого ряда получил размерность (1, 100, 2) предсказал (1, 2) по новому значению для каждого ряда. Далее из (1, 100, 2) первого и второго ряда выкидываю по одному первому значению и дополняю с конца спрогнозированными и снова получаю (1, 100, 2) но с конца новые данные и так 100 итераций. Я конечно ожидал что то похожее на предыдущие 100 значений хотя бы какую то кривизну графика, а получаю почти две прямых есть конечно небольшие отклонения этих прямых, но это все равно не то что я ожидал.
Кто-нибудь знает как правильно? Везде показывают на тестовой выборки как у них все замечательно ведь данные уже есть как бы и они формируют эти ряды одним пакетом сдвигая каждый ряд на N+1 а как мне подготовить пакет ведь я ограничен 1 шагом вперед так как конец датасета, даже если буду не по одному значению прогнозировать а несколько суть проблемы не изменит
freeExec, я оставлял 2 таких вопроса, но что то ответов нет либо ни кто толком не знает либо я как то плохо описывал что хотел. Ну вот смотрите у меня есть допустим 1000к датасет я его разбиваю на 990 семплов в каждом 100 значений сиквенции предсказание + одно число и на выходе я получаю (990,1 ) шейп с предскантем сетки. т. Е. Я могу в фит запихать всю выборку потому что знаю ее. П в случае с предсказанием за выборку Я могу подать в предикт только 1 семпл и получить 1 предик. Как получит N +2 число? А для этого формировал новый семпл с этим числом на конце и предсказывал новое и теперь уже два новых числа вхонце семпл и так добавлял новые предсказания в семпл пока оно полностью не заменится новыми предсказанными значениями. Суть такая что я вместо одного раза как в тренинге передав 990 семплов получал 990 предиктов делал итеративный вызыв предикт N кол-во раз чтобы получить N кол-ва предиктов.
Проблема в том что с тренингом предсказнте сети нормально но вот предсказание за датасет ужасное
Потому, что вы пытаетесь предсказать всего на основе 1 реального значения, а нужно на 99.
Посмотрите на генераторы текстов (GPT-3 и аналоги). Они не вводят одно начальное слово Итак и не ждут, что сеть напишет им Евгения Онегина. А задают целый абзац начальной темы.
freeExec, так я подаю на вход вектор из 100 значений и жду одно. Потом собираю новый вектор из 100 но выкидываю первое значение и добовляю новое. И так далее добавляя в вектор новые предикты пока вектор полностью не заполнится только новыми значениями. Как будто то у меня уже был вектор из этих значений и я просто двигал окно на N+1 сто раз. Ведь тренинг так же работает у него есть допустим 990 семплов и в каждом последующем семпле окно сдвинуто на N+1. Только тут я делаю новый семпл сам потому что не имею следующих
freeExec, пробовал код со статьи https://machinelearningmastery.com/how-to-develop-...
Multiple Parallel Input and Multi-Step Output т.е. подаю 1 семпл размерностью 100 получаю допустим семпл из 50 значений.
подключил свой датасет и loss уходит в Nun функция активации relu, поменял на tanh в nun перестало уходить, но все графики стали себя в какой то мере повторять разница только по высоте графика, но геометрически они себя повторяли. На форумах пишу либо это градиентный срыв либо в датасете есть значения Nun. Значений Nun нету проверял. Пробовал делать градиент отсечки 0.5, nun ушел но графики предсказанные такие себе .. все перетыкал даже не знаю где еще подробной инфы почитать