Как можно обучать нейронную сеть, используя данные из скользящего окна?

У меня есть датасет 150x2,000,000, где строки обозначают последовательные моменты времени. При этом на вход нейронной сети будут подаваться таблицы 150x10,000.

Я хотел бы обучить модель на строках [0, 9999], [1, 10000], [2, 10001]... исходного датасета, но очевидно я не могу хранить их в чистом виде.

Как я могу обучать свою модель последовательно на этих "окнах"?

В данный момент я использую Keras.Sequential, но вообще хотелось бы узнать принцип, применимый не только для данной модели.


Ответы (1 шт):

Автор решения: passant

Должен сказать, что идея не хорошая. Дело в том, что при обучении нейросети вы вообще-то говоря должны стремиться, что-бы каждый новый обучающий пример действительно "учил" сеть, т.е. привносил как можно больше новой информации. У вас-же разница между двумя окнами [0, 9999], [1, 10000] - по сути в двух крайних значениях, т.е. нового в этом примере вы привнесли аж 1/5000.

Поэтому куда разумнее учить нейросеть изменяя окно наблюдения на гораздо больший шаг, а при наличии достаточного количества данных - может и не всю длину этого окна. Т.е. брать обучающие примеры как [0, 9999],[10000,19999],[20000,29999] и так далее. Ну можно, например, с перекрытием [0, 9999],[5000,14999],[10000,19999],[15000,24999] и т.д. Но во-первых, надо экспериментировать, а во-вторых, все зависит от задачи, которую вы пытаетесь решить.

И помните, что для работы с временными рядами если вам уж так хочется использовать нейросетевой подход, разумнее использовать LSTM-сети. Или prophet - если у вас данные связанные с реальной экономикой. Хотя если - как представляется - у вас одномерные данные, то модели типа Брауна-Хольта-Винтерса, или ARIMA могут оказаться более адекватными.

→ Ссылка