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

在我的理解中,密集层仅适用于二维张量,而 TimeDistributed 只是在三维的每个时间步上应用相同的密集层。那么是否可以不简单地展平时间步长,应用一个密集层并进行重塑以获得相同的结果,或者这些在某些方面不是我所缺少的吗?

最佳答案

密集层可以作用于任何张量,不一定是 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()
_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
dense_5 (Dense)              (None, 50, 5)             55
=================================================================
Total params: 55
Trainable params: 55
Non-trainable params: 0
_________________________________________________________________
model1 = Sequential()

model1.add(TimeDistributed(Dense(5),input_shape=(50,10)))

model1.summary()

_______________________________________________________
层(类型)输出形状参数#
================================================== ================
time_distributed_3 (TimeDist (None, 50, 5) 55
================================================== ================
总参数:55
可训练参数:55
不可训练的参数:0
_______________________________________________________

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

10-12 22:06