根据 keras 的 LSTM 文档,输入应该是具有形状(批量、时间步长、特征)的 3D 张量
输出将为(批次,单位),其中单位是我们想要从 LSTM 单元获得的数字特征。
据我所知,lstm 的单个单元将隐藏状态、单元状态和单个数字作为时间戳 t 的输入,并将其输出以 c(t+1) 和 h(t+1) 的形式传递到下一个单元。但从文档代码来看,它正在生成 2D 形式的输出?
inputs = np.random.random((32, 10, 8))
lstm = keras.layers.LSTM(4)
output = lstm(inputs)
output.shape
(32, 4)
问题1:向量表示如何传递给LSTM? (在每个时间戳处,它传递 8 个特征。如果有 8 个 lstm 单元并行运行,则输出大小也应为 8)
问题2:最终输出的大小如何为4。(如果我们忽略batch size)
LSTM 与基本人工神经元架构兼容,因此您的输入层有 8 个特征,这些特征完全连接到输出层中的所有 4 个 LSTM 单元,因此在每个时间步骤中,您的网络都由大小为 8 的特征向量馈送,产生大小为 4 的输出,并且每个 LSTM 单元正在学习(除其他外)大小为 8 的向量来衡量输入。
LSTM,或者一般的循环神经网络 (RNN),通常在每个训练步骤中随时间推移输入输入向量序列,以利用其隐藏状态。在您的情况下,这些序列的长度为 10。对于每个时间步 LSTM 都会生成一个输出,但除非将
return_sequences
设置为 True
对于 LSTM 单位,否则仅返回最后一个输出。因此,每个批次的输出大小为 4,而不是 (10, 4)。
为了更深入地了解 LSTM,我推荐阅读以下内容:https://colah.github.io/posts/2015-08-Understanding-LSTMs/。 为了学习如何使用 Tensorflow 通过 LSTM 进行时间序列预测,我发现这非常有用:https://www.tensorflow.org/tutorials/structed_data/time_series。