我对时间序列 LSTM训练的理解是,循环单元展开到指定的长度 ( num_steps),并且参数更新沿该长度反向传播。然而,一旦经过训练,LSTM 单元应该能够接受任意数量的时间步并产生输出。
例如,假设我有一个单层 LSTM,它在每个时间步接受 3 个城市(每个时间步 4 * 3 = 12 个特征)的温度、湿度和风向矢量(2D 方向),并预测附近第 4 个城市的温度和湿度(a 的 2 个输出特征t+1)。
假设对于训练,我设置num_steps=10和batch_size=16。
这意味着它将接受一个形状向量(16, 10, 12)进行训练,并且 Keras LSTM 层将被初始化为input_shape=(10, 12). 我给它输入大量数据并运行几个 epoch,然后训练 LSTM 单元。
一旦受过训练,我应该能够喂食任意数量的时间步长,对吧?就像我可以输入 8 个时间步并获得输出,或者输入 50 个时间步并获得输出。我不应该局限于我为展开训练指定的 10 个。我的理解是,这种固定长度的展开只是训练所必需的,本质上是反向传播算法的一个限制。
我的理解是这就是 RNN 的重点:输入长度是任意的;处理输入的 LSTM 单元与处理输入t的单元相同t-1(唯一的区别是输入和状态将不同)。
我问的原因是因为无论我在哪里看,它似乎都num_steps成为训练有素的网络的内在属性,无法改变。我必须始终输入那么多时间步才能获得输出。此外,通过增加num_steps,参数的数量也会增加。num_steps*num_features如果时间步数必须固定,那么我看不到 RNN/LSTM 相对于具有特征输入节点的标准前馈网络的优势。
我是否对 RNN/LSTM 有错误的理解,或者我误解了 Keras 文档/示例,或者这仅仅是 Keras 的限制?