gpt4 book ai didi

tensorflow - 为什么不使用 Flatten 和 Dense 层来代替 TimeDistributed?

转载 作者:行者123 更新时间:2023-11-30 08:51:04 28 4
gpt4 key购买 nike

我正在尝试更好地理解 Keras 层。我正在研究一个序列到序列模型,我在其中嵌入一个句子并将其传递给返回序列的 LSTM。此后,我想将 Dense 层应用于句子中的每个时间步长(单词),并且 TimeDistributed 似乎可以完成像这种情况这样的三维张量的工作。

根据我的理解,密集层仅适用于二维张量,而 TimeDistributed 仅在三个维度的每个时间步上应用相同的密集。那么,是否可以不简单地压平时间步长,应用致密层并执行 reshape 以获得相同的结果,或者这些在我所缺少的某些方面不等效?

最佳答案

假设您有一批 4 个时间步长,每个时间步长包含一个 3 元素向量。让我们用这个来表示:

Input batch

现在您想要使用密集层来转换该批处理,以便每个时间步获得 5 个特征。该层的输出可以表示为如下所示:

Output batch

您考虑两个选项,TimeDistributed 密集层,或 reshape 为平面输入,应用密集层并 reshape 回时间步长。

在第一个选项中,您将向每个时间步应用具有 3 个输入和 5 个输出的密集层。这可能看起来像这样:

TimeDistributed layer

这里的每个蓝色圆圈都是致密层中的一个单元。通过对每个输入时间步执行此操作,您可以获得总输出。重要的是,这五个单元对于所有时间步都是相同的,因此您只有具有 3 个输入和 5 个输出的单个密集层的参数。

第二个选项涉及将输入展平为 12 元素向量,应用具有 12 个输入和 20 个输出的密集层,然后将其 reshape 回来。看起来是这样的:

Flat dense layer

为了清楚起见,此处仅绘制了一个单元的输入连接,但每个单元都将连接到每个输入。显然,这里有更多的参数(具有 12 个输入和 20 个输出的密集层的参数),并且还要注意每个输出值都受到每个输入值的影响,因此一个时间步中的值会影响其他时间步中的输出。这是好还是坏取决于您的问题和模型,但它与之前的一个重要区别是,每个时间步的输入和输出都是独立的。除此之外,此配置要求您在每个批处理上使用固定数量的时间步长,而之前的配置与时间步数无关。

您还可以考虑使用四个密集层的选项,每个密集层独立应用于每个时间步(我没有绘制它,但希望您明白这一点)。这与前一个类似,只是每个单元只会从其各自的时间步输入接收输入连接。我认为在 Keras 中没有一种直接的方法可以做到这一点,您必须将输入分成四个,对每个部分应用密集层并合并输出。同样,在这种情况下,时间步数将是固定的。

关于tensorflow - 为什么不使用 Flatten 和 Dense 层来代替 TimeDistributed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53670332/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com