python - Keras 实现中的 LSTM 架构?

标签 python keras deep-learning lstm recurrent-neural-network

我是 Keras 的新手,正在查看 Keras 文档中的 LSTM 及其实现细节。本来很容易,但突然我发现了this SO帖子和评论。它让我对真正的 LSTM 架构感到困惑:

这是代码:

model = Sequential()
model.add(LSTM(32, input_shape=(10, 64)))
model.add(Dense(2))

据我了解,10表示编号。时间步长,每个时间步长都被馈送到各自的 LSTM 单元; 64 表示编号。每个时间步长的特征。

但是,上面帖子中的评论和实际答案让我对 32 的含义感到困惑。

此外,LSTM 的输出如何连接到 Dense 层。

手绘的图表解释对于架构的可视化非常有帮助。

编辑:

this another SO就 post 而言,如果 return_sequences=True,那么这意味着 32 表示 每个 LSTM 单元 生成的输出向量的长度。

如果这是真的,那么我们如何将 10 个 LSTM 单元产生的每个 32 维输出连接到下一个密集层?

另外,请告诉我第一个帖子的答案是否不明确

最佳答案

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?

您可以获取最后 LSTM 单元(最后时间步)的输出或每个 LSTM 单元的输出,具体取决于 return_sequences 的值。至于输出向量的维度,这只是您必须做出的选择,就像密集层的大小或卷积层中的滤波器数量一样。

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 输出。 p>

请注意,当您不知道需要多少个时间步时,一切仍然有效,例如用于机器翻译。在本例中,您使用 None 作为时间步长;我写的所有内容仍然适用,唯一的区别是时间步数不再固定。 Keras 将根据需要多次重复 LSTM、TimeDistributed 等(这取决于输入)。

关于python - Keras 实现中的 LSTM 架构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53966446/

相关文章:

python - Tensorflow 不使用 tf.distribute.MirroredStrategy() 检测多个 CPU 内核

neural-network - 是否有使用加权损失进行像素分割/分类任务的示例?

Python Popen grep

python - 用 python 进行 sentiwordnet 评分

python - 如何根据另一个数据框中定义的行/列缩放因子缩放 pandas 数据框?

tensorflow - 在Keras中构建数据时如何使用repeat()函数?

python - 从 read_csv 中提取文件名 - Python

python - 神经网络不学习(损失保持不变)

python - Keras:如何保存模型或权重?

python - 向 Keras 顺序模型添加手工制作的功能