And*_*sen 4 machine-learning lstm keras tensorflow keras-layer
我试图更好地理解 Keras 层。我正在研究一个序列到序列模型,我在其中嵌入一个句子并将其传递给返回序列的 LSTM。此后,我想对句子中的每个时间步长(单词)应用一个 Dense 层,似乎 TimeDistributed 为这种情况下的三维张量完成了这项工作。
在我的理解中,密集层仅适用于二维张量,而 TimeDistributed 只是在三维的每个时间步上应用相同的密集层。那么是否可以不简单地展平时间步长,应用一个密集层并进行重塑以获得相同的结果,或者这些在某些方面不是我所缺少的吗?
想象一下,您有一批 4 个时间步,每个都包含一个 3 元素向量。让我们用这个来表示:
现在您想使用密集层转换此批次,因此每个时间步长您会获得 5 个特征。该层的输出可以表示为如下所示:
您考虑两个选项,TimeDistributed密集层,或作为平面输入重塑,应用密集层并重塑回时间步长。
在第一个选项中,您将对每个时间步应用具有 3 个输入和 5 个输出的密集层。这可能是这样的:
这里的每个蓝色圆圈都是密集层中的一个单元。通过对每个输入时间步长执行此操作,您可以获得总输出。重要的是,这五个单元对于所有时间步长都是相同的,因此您只有具有 3 个输入和 5 个输出的单个密集层的参数。
第二种选择是将输入扁平化为一个 12 元素的向量,应用具有 12 个输入和 20 个输出的密集层,然后将其重新整形。这是它的外观:
为了清楚起见,这里只绘制了一个单元的输入连接,但每个单元都将连接到每个输入。在这里,显然,您有更多参数(具有 12 个输入和 20 个输出的密集层的参数),还要注意每个输出值都受每个输入值的影响,因此一个时间步中的值会影响其他时间步中的输出. 这是好事还是坏事取决于您的问题和模型,但它与之前的每个时间步的输入和输出都是独立的,这是一个重要的区别。除此之外,此配置要求您在每个批次上使用固定数量的时间步长,而之前的配置与时间步长的数量无关。
您还可以考虑选择具有四个密集层,每个层独立应用于每个时间步(我没有绘制它,但希望您能理解)。这将与前一个类似,只有每个单元将仅从其各自的时间步输入接收输入连接。我认为在 Keras 中没有一种直接的方法可以做到这一点,您必须将输入分成四个,将密集层应用于每个部分并合并输出。同样,在这种情况下,时间步数将是固定的。
密集层可以作用于任何张量,不一定是等级 2。而且我认为 TimeDistributed 包装器不会改变密集层的作用方式。仅将 Dense 层应用于 3 阶张量将与应用 Dense 层的 TimeDistributed 包装器完全相同。这是插图:
from tensorflow.keras.layers import *
from tensorflow.keras.models import *
model = Sequential()
model.add(Dense(5,input_shape=(50,10)))
model.summary()
Run Code Online (Sandbox Code Playgroud)
_________________________________________________________________ 层(类型)输出形状参数# =================================================== =============== 密集_5(密集)(无、50、5)55 =================================================== =============== 总参数:55 可训练参数:55 不可训练参数:0 _________________________________________________________________
model1 = Sequential()
model1.add(TimeDistributed(Dense(5),input_shape=(50,10)))
model1.summary()
Run Code Online (Sandbox Code Playgroud)
_________________________________________________________________ 层(类型)输出形状参数# =================================================== =============== time_distributed_3 (TimeDist (无, 50, 5) 55 =================================================== =============== 总参数:55 可训练参数:55 不可训练参数:0 _________________________________________________________________
| 归档时间: |
|
| 查看次数: |
2101 次 |
| 最近记录: |