Stateful против Stateless LSTM - PullRequest
       51

Stateful против Stateless LSTM

1 голос
/ 25 апреля 2020

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

У меня есть длинная серия предсказателей X=[X1,X2,....,Xn] и длинная серия ответов y=[0,0,...,1,1,0,...0]. Они имеют одинаковую длину, и ответ может принимать только значение 1 или 0. Мой план состоит в том, чтобы отобрать длинный ряд предикторов и использовать короткий ряд (длина 4), чтобы предсказать ответ для следующих 3 временных точек. Итак, мои тренировочные данные выглядят так:

[X1,X2,X3,X4],[y5,y6,y7]
[X2,X3,X4,X5],[y6,y7,y8]
...

Если я использую все эти доступные короткие серии (образцы), я думаю, что я должен выбрать Stateful. Однако, поскольку в y намного больше 0 по сравнению с 1, я сохраню все выборки, в которых есть 1, в серии коротких ответов (например, сохраняю эту выборку [y5=0,y6=1,y7=0]), но случайно выбрасываю много других выборки просто для баланса данных.

Я не уверен, стоит ли использовать здесь с сохранением состояния, поскольку некоторые короткие серии могут быть очень далеко друг от друга.

1 Ответ

1 голос
/ 26 апреля 2020

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

Технически, вы можете добиться этого просто с помощью LSTM с отслеживанием состояния и нарезать ваши данные на ту же длину, а затем предоставить sample_weight . Например, model.fit (x = data, y = class, sample_weight = np.array ([1,1,0,0,0,1])), это поможет вам достичь того, чего вы хотите, удалив индекс 2, 3,4, не удаляя его из ваших данных вручную.

Обычно мы изменяем потери, а не удаляем какую-то часть временных рядов, что-то вроде неправильной классификации класса 1 приведет к потере в 10 раз больше, чем к классу 0.

Надеюсь, эта помощь

...