了解 LSTM 结构

数据挖掘 深度学习 喀拉斯 lstm rnn
2021-09-25 20:27:33

我正在尝试学习 LSTM,并在 LSTM 层的结构和输入/输出方面有些挣扎。假设我有这样的网络定义:

timesteps = 50
features = 10
inp = Input(shape=(timesteps, features,), name="input_layer")
x = LSTM(128, return_sequences=True, name="lstm1")(inp)
x = LSTM(64, return_sequences=False, name="lstm2")(x)
x = Dense(128, activation="relu", name="dense1")(x)
x = Dense(64, activation="relu", name="dense2")(x)
x = Dense(1, activation='sigmoid', name="output")(x)
model = Model(inputs=inp, outputs=x)
model.compile(loss='binary_crossentropy', optimizer='adam')

我可以在互联网上找到大量关于 LSTM 单元内部结构的资源。例如,具有一个输入和一些输出的图形。但我首先想从更高的层次了解 LSTM 层在不同配置中的输入和输出。

假设我的输入数据形状为 (1000,50,10)。所以 1000 个观测值,每个观测值有 10 个特征的 50 个时间步长。

问题:

我的理解是,第一层(“lstm1”)会将输入作为形状(50、10)。1000 个观测值中的每一个,一次一个。10 个特征是如何输入到 LSTM 层的?它是否类似于密集层,所以每个输入特征都会以一定的权重进入每个 LSTM 单元? 这个答案似乎表明了这一点,但我不太明白该答案中每个 LSTM“单元”的多个输入是什么(甚至可能是什么“单元”)。

以及内部运作。这里的“lstm1”是否一次处理所有 50 个时间步然后产生输出?在完成所有 50 个时间步之后,下一层从该输出中获取输入?该输出的形状是什么?它是形状=(50、128)吗?那么在这种情况下,输出“特征”的集合是 LSTM 层中的单元数吗?并且由于“return_sequences=True”,它还在每个时间步输出中间值以产生 shape=(50,XXX) 输出?

这导致了我对“lstm2”层的问题。使用“return_sequences=False”,它现在是否输出一个包含 64 个值的数组?那么形状=(64)?每个时间步都没有价值,而是在“展开”单元循环结束时每个单位只有一个?

1个回答

添加

model.summary()

产生这个输出

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_layer (InputLayer)     (None, 50, 10)            0         
_________________________________________________________________
lstm1 (LSTM)                 (None, 50, 128)           71168     
_________________________________________________________________
lstm2 (LSTM)                 (None, 64)                49408     
_________________________________________________________________
dense1 (Dense)               (None, 128)               8320      
_________________________________________________________________
dense2 (Dense)               (None, 64)                8256      
_________________________________________________________________
output (Dense)               (None, 1)                 65        
=================================================================
Total params: 137,217
Trainable params: 137,217
Non-trainable params: 0
_________________________________________________________________
  1. LSTM Unit 表示 Layer 输出的维度。在此处输入图像描述
  2. LSTM 层(例如 lstm1),处理 1 个输入(本例中为 50,10)并生成每个时间步长的 128 位表示。
  3. lstm2 确实生成了一个具有 64 个值的向量。它需要学习将输出转换为单个向量所需的约 49k 参数

参考 :

https://www.researchgate.net/publication/13853244

https://www.quora.com/What-is-the-meaning-of-%E2%80%9CThe-number-of-units-in-the-LSTM-cell

https://www.quora.com/What-the-difference-between-an-LSTM-memory-cell-and-an-LSTM-layer