Как рассчитать правильный размер партии для LSTM? - PullRequest
1 голос
/ 18 мая 2019

У меня есть ежедневные данные временного ряда, как показано ниже.

            CashIn  CashOut
Date        
2016-01-01  0.0     6500.0
2016-01-02  0.0     23110.0
2016-01-03  0.0     7070.0
2016-01-04  0.0     18520.0
2016-01-05  20840.0 22200.0
.
.
.
2019-03-25  59880.0 25500.0
2019-03-26  49270.0 17860.0
2019-03-27  45160.0 48600.0
2019-03-28  39480.0 22840.0
2019-03-29  70260.0 25950.0
2019-03-30  19250.0 24350.0
2019-03-31  46870.0 14400.0

Мой общий объем данных составляет 1186. Я хочу спрогнозировать значения CashIn и CashOut между 2019-04-01 и 2019-04-30, используя LSTM.

Я написалПакетный калькулятор, как показано ниже.

def get_batches(arr, batch_size, seq_length):

    batch_size_total = batch_size * seq_length

    n_batches = len(arr)//batch_size_total

    arr = arr[:n_batches * batch_size_total]
    arr = arr.reshape((batch_size, -1))

    for n in range(0, arr.shape[1], seq_length):
        x = arr[:, n:n+seq_length]
        y = np.zeros_like(x)
        try:
            y[:, :-1], y[:, -1] = x[:, 1:], arr[:, n+seq_length]
        except IndexError:
            y[:, :-1], y[:, -1] = x[:, 1:], arr[:, 0]
        yield x, y

Я пытаюсь разделить этот набор данных с помощью функции get_batches на пакеты, которые имеют длину 30 последовательностей, потому что у меня есть дневные временные ряды, и я хочу прогнозировать следующие 30 дней.

batches = get_batches(np.array(data_cashIn), 40, 30)

Если я записываю 39 вместо 40 в качестве параметра в функции get_bathces, то я теряю последние 16 ежедневных данных, но не хочу их терять.

Как я могу это сделатьправильно?

1 Ответ

1 голос
/ 18 мая 2019

Я думаю, что у вас всегда будет номер, который не работает.Потому что это не лучшая практика.Я предлагаю вам использовать DataLoader, который будет легко загружать пакеты для вас ( и вот как вы можете получить пользовательский набор данных, поданный в кодировщик данных ).Передав batch_size Dataloader, он разделит ваш набор данных на максимально возможные партии batch_size с последней партией <=batch_size.


В отношении LSTM, используйте batch_first=True и ваша партия будет в этой форме (batch, seq, feature).Это позволит вам избавиться от головной боли при задании определенного размера, и input_size должно быть равно feature.

...