在 KerasLSTM(n)
中的意思是“创建一个由 LSTM 单元组成的 LSTM 层。下图演示了层和单元(或神经元)是什么,最右边的图像显示了单个 LSTM 单元的内部结构。

下图展示了整个 LSTM 层是如何运作的。

正如我们所知,LSTM 层处理一个序列,即x1,…,xN. 在每一步t层(每个神经元)接受输入xt, 上一步的输出ht−1, 和偏差b,并输出一个向量ht. 坐标ht是神经元/单元的输出,因此是向量的大小ht等于单位/神经元的数量。这个过程一直持续到xN.
现在让我们计算参数的数量,LSTM(1)
并将LSTM(3)
其与 Keras 在调用时显示的内容进行比较model.summary()
。
让inp是向量的大小xt和out是向量的大小ht(这也是神经元/单位的数量)。每个神经元/单元接受输入向量、上一步的输出和一个偏置,使得inp+out+1参数(权重)。但是我们有out神经元的数量,所以我们有out×(inp+out+1)参数。最后每个单元有 4 个权重(见最右边的图像,黄色框),我们有以下公式计算参数的数量:
4out(inp+out+1)
让我们比较一下 Keras 的输出。
示例 1。
t1 = Input(shape=(1, 1))
t2 = LSTM(1)(t1)
model = Model(inputs=t1, outputs=t2)
print(model.summary())
Layer (type) Output Shape Param #
=================================================================
input_2 (InputLayer) (None, 1, 1) 0
_________________________________________________________________
lstm_2 (LSTM) (None, 1) 12
=================================================================
Total params: 12
Trainable params: 12
Non-trainable params: 0
_________________________________________________________________
单元数为 1,输入向量的大小为 1,所以4×1×(1+1+1)=12.
示例 2。
input_t = Input((4, 2))
output_t = LSTM(3)(input_t)
model = Model(inputs=input_t, outputs=output_t)
print(model.summary())
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_6 (InputLayer) (None, 4, 2) 0
_________________________________________________________________
lstm_6 (LSTM) (None, 3) 72
=================================================================
Total params: 72
Trainable params: 72
Non-trainable params: 0
单元数为3,输入向量的大小为2,所以4×3×(2+3+1)=72