Вы пробовали подавать слой LSTM входами разной длины?Вводимые временные ряды могут иметь различную длину при использовании LSTM (даже размеры партии могут отличаться от одной партии к другой, но размеры объектов должны быть одинаковыми).Вот пример в Керасе:
from keras import models, layers
n_feats = 32
latent_dim = 64
lstm_input = layers.Input(shape=(None, n_feats))
lstm_output = layers.LSTM(latent_dim)(lstm_input)
model = models.Model(lstm_input, lstm_output)
model.summary()
Вывод:
Layer (type) Output Shape Param #
=================================================================
input_2 (InputLayer) (None, None, 32) 0
_________________________________________________________________
lstm_2 (LSTM) (None, 64) 24832
=================================================================
Total params: 24,832
Trainable params: 24,832
Non-trainable params: 0
Как видно, первая и вторая оси входного слоя - None
.Это означает, что они не указаны заранее и могут иметь любое значение.Вы можете думать о LSTM как о цикле.Независимо от длины ввода, пока есть оставшиеся векторы данных одинаковой длины (т.е. n_feats
), уровень LSTM обрабатывает их.Поэтому, как вы можете видеть выше, количество параметров, используемых в слое LSTM, не зависит от размера пакета или длины временного ряда (это зависит только от длины вектора входного объекта и скрытого измерения LSTM).
import numpy as np
# feed LSTM with: batch_size=10, timestamps=5
model.predict(np.random.rand(10, 5, n_feats)) # This works
# feed LSTM with: batch_size=5, timestamps=100
model.predict(np.random.rand(5, 100, n_feats)) # This also works
Однако, в зависимости от конкретной проблемы, над которой вы работаете, это может не сработать;хотя у меня сейчас нет конкретных примеров, в которых это поведение может быть неприемлемым, и вы должны убедиться, что все временные ряды имеют одинаковую длину.