您是否尝试过为 LSTM 层提供不同长度的输入?当使用 LSTM 时,输入时间序列的长度可以不同(即使批次大小也可以从一个批次到另一个批次不同,但显然特征的维度应该是相同的)。这是 Keras 中的一个示例:
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
但是,根据您正在处理的具体问题,这可能不起作用;虽然我现在没有任何具体的例子表明这种行为可能不合适,但您应该确保所有时间序列的长度相同。