Более эффективный ввод Keras LSTM? - PullRequest
1 голос
/ 04 марта 2020

При создании тензоров для LSTM в Керасе ввод временных рядов кажется таким неэффективным. Есть ли другой способ сделать это? Например, перед преобразованием в тензор ряд может быть:

  • [1, 2, 3, 4, 5, 6, 7, 8] с меткой [9]. Следующим будет:
  • [2, 3, 4, 5, 6, 7, 8, 9] с надписью [10].
  • [3, 4, 5, 6 , 7, 8, 9, 10] -> [11]

И так далее, сколько бы чисел не было в моей серии. В этом случае у меня только 8 временных шагов на выборку, но я по-прежнему создаю 8-кратный объем данных, который у меня был первоначально до отправки его в LSTM - подавляющее большинство из них являются избыточными. Для серий с 50 временными шагами я создаю примерно 50-кратные исходные данные. Это просто кажется неэффективным. Когда все данные поступают из одной длинной последовательности, существует ли более эффективный способ загрузки этих данных в LSTM? Предоставляет ли tf.data такую ​​функциональность, которую я пропустил?

1 Ответ

1 голос
/ 04 марта 2020

Нет, но вы можете попробовать использовать return_sequences=True (эта модель также будет поддерживать Conv1D, но не будет поддерживать Flatten или пулы).

И затем вы можете использовать сдвинутые выходы:

  • входы [1, 2, 3, 4, 5, 6, 7, 8] с метками [2,3,4,5,6,7,8,9]
  • входы [a, b, c, d, e, f, g, h] с метками [b,c,d,e,f,g,h,i]

В основном:

  • x_train = original_sequences[:, :-1]
  • y_train = original_sequences[:, 1: ]

Последствия:

  • Возможные эффекты границы (в начале последовательностей модель будет не очень хорошей)
  • Неограниченное количество шагов ввода (для прогноза модель будет использовать более 8 шагов) - В зависимости от данных результаты могут быть слишком зависимы от последовательности, более длинной, чем вы изначально хотели
    • Это может произойти или не произойти, стоит попробовать
    • Если это произойдет, это может быть или не быть проблемой, это зависит от ваших намерений с этой моделью
  • Невозможно использовать Bidirectional, поскольку на результаты будут влиять будущие значения. (В той же строке для сверток следует использовать заполнение 'causal', иначе будущие значения также повлияют на результат).
...