Keras 实现中的 LSTM 架构?
LSTM architecture in Keras implementation?
我是 Keras
的新手,正在研究 LSTM 及其在 Keras documentation
中的实现细节。这很容易,但突然间我通过了 post 和评论。它让我对什么是实际的 LSTM 架构感到困惑:
代码如下:
model = Sequential()
model.add(LSTM(32, input_shape=(10, 64)))
model.add(Dense(2))
据我了解,10 表示编号。时间步长,每个时间步长都被馈送到各自的 LSTM cell
; 64表示没有。每个时间步长的特征。
但是,上面的评论 post 和实际答案让我对 32 的含义感到困惑。
此外,LSTM
的输出如何连接到 Dense
层。
手绘图解释对可视化架构非常有帮助。
编辑:
就 post而言,则表示32表示each产生的输出向量的长度LSTM cells
如果 return_sequences=True
。
如果这是真的,那么我们如何将 10 个 LSTM 单元中的每一个产生的每个 32 维输出连接到下一个密集层?
此外,请告知第一个 SO post 答案是否 模棱两可 ?
how do we connect each of 32-dimensional output produced by each of
the 10 LSTM cells to the next dense layer?
这取决于你想怎么做。假设你有:
model.add(LSTM(32, input_shape=(10, 64), return_sequences=True))
然后,该层的输出具有形状(10, 32)
。此时,您可以使用 Flatten
层来获得具有 320
分量的单个向量,或者使用 TimeDistributed
独立处理每个 10
向量:
model.add(TimeDistributed(Dense(15))
该层的输出形状为(10, 15)
,相同的权重应用于每个LSTM单元的输出。
it's easy to figure out the no. of LSTM cells required for the input(specified in timespan)
How to figure out the no. of LSTM units required in the output?
您要么获得 last LSTM 单元(最后一个时间步长)的输出,要么获得每个 LSTM 单元的输出,具体取决于 return_sequences
的值。至于输出向量的维数,那只是你必须做出的选择,就像一个密集层的大小,或者一个 conv 层中过滤器的数量。
how each of the 32-dim vector from the 10 LSTM cells get connected to TimeDistributed layer?
按照前面的示例,您将有一个 (10, 32)
张量,即 10 个 LSTM 单元中的每一个单元的大小为 32 的向量。 TimeDistributed(Dense(15))
所做的是创建一个 (15, 32)
权重矩阵和一个大小为 15 的偏置向量,然后执行:
for h_t in lstm_outputs:
dense_outputs.append(
activation(dense_weights.dot(h_t) + dense_bias)
)
因此,dense_outputs
的大小为 (10, 15)
,并且相同的权重应用于每个 LSTM 输出,独立地。
请注意,当您不知道需要多少时间步时,一切仍然有效,例如用于机器翻译。在这种情况下,您使用 None
作为时间步长;我写的所有内容仍然适用,唯一的区别是时间步数不再固定。 Keras 将根据需要重复 LSTM、TimeDistributed 等多次(取决于输入)。
我是 Keras
的新手,正在研究 LSTM 及其在 Keras documentation
中的实现细节。这很容易,但突然间我通过了
代码如下:
model = Sequential()
model.add(LSTM(32, input_shape=(10, 64)))
model.add(Dense(2))
据我了解,10 表示编号。时间步长,每个时间步长都被馈送到各自的 LSTM cell
; 64表示没有。每个时间步长的特征。
但是,上面的评论 post 和实际答案让我对 32 的含义感到困惑。
此外,LSTM
的输出如何连接到 Dense
层。
手绘图解释对可视化架构非常有帮助。
编辑:
就LSTM cells
如果 return_sequences=True
。
如果这是真的,那么我们如何将 10 个 LSTM 单元中的每一个产生的每个 32 维输出连接到下一个密集层?
此外,请告知第一个 SO post 答案是否 模棱两可 ?
how do we connect each of 32-dimensional output produced by each of the 10 LSTM cells to the next dense layer?
这取决于你想怎么做。假设你有:
model.add(LSTM(32, input_shape=(10, 64), return_sequences=True))
然后,该层的输出具有形状(10, 32)
。此时,您可以使用 Flatten
层来获得具有 320
分量的单个向量,或者使用 TimeDistributed
独立处理每个 10
向量:
model.add(TimeDistributed(Dense(15))
该层的输出形状为(10, 15)
,相同的权重应用于每个LSTM单元的输出。
it's easy to figure out the no. of LSTM cells required for the input(specified in timespan)
How to figure out the no. of LSTM units required in the output?
您要么获得 last LSTM 单元(最后一个时间步长)的输出,要么获得每个 LSTM 单元的输出,具体取决于 return_sequences
的值。至于输出向量的维数,那只是你必须做出的选择,就像一个密集层的大小,或者一个 conv 层中过滤器的数量。
how each of the 32-dim vector from the 10 LSTM cells get connected to TimeDistributed layer?
按照前面的示例,您将有一个 (10, 32)
张量,即 10 个 LSTM 单元中的每一个单元的大小为 32 的向量。 TimeDistributed(Dense(15))
所做的是创建一个 (15, 32)
权重矩阵和一个大小为 15 的偏置向量,然后执行:
for h_t in lstm_outputs:
dense_outputs.append(
activation(dense_weights.dot(h_t) + dense_bias)
)
因此,dense_outputs
的大小为 (10, 15)
,并且相同的权重应用于每个 LSTM 输出,独立地。
请注意,当您不知道需要多少时间步时,一切仍然有效,例如用于机器翻译。在这种情况下,您使用 None
作为时间步长;我写的所有内容仍然适用,唯一的区别是时间步数不再固定。 Keras 将根据需要重复 LSTM、TimeDistributed 等多次(取决于输入)。