我试图更好地理解 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/