我正在尝试学习 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)?每个时间步都没有价值,而是在“展开”单元循环结束时每个单位只有一个?