我试图理解TimeDistributed Package 器在Keras中的作用。
我知道TimeDistributed“将一个层应用到输入的每个时间切片。”
但是我做了一些实验,得到了我无法理解的结果。
简而言之,关于LSTM层,TimeDistributed和Dense层具有相同的结果。
model = Sequential()
model.add(LSTM(5, input_shape = (10, 20), return_sequences = True))
model.add(TimeDistributed(Dense(1)))
print(model.output_shape)
model = Sequential()
model.add(LSTM(5, input_shape = (10, 20), return_sequences = True))
model.add((Dense(1)))
print(model.output_shape)
字符串
对于这两个模型,我得到的输出形状为**(None,10,1)**。
谁能解释一下RNN层之后的TimeDistributed和Dense层之间的区别?
2条答案
按热度按时间7eumitmz1#
在
keras
中-在构建序列模型时-通常是第二维(一个在样本维度之后)-与time
维度相关。这意味着,例如,如果您的数据是5-dim
和(sample, time, width, length, channel)
,您可以使用TimeDistributed
(适用于4-dim
和(sample, width, length, channel)
)沿着时间维度应用卷积层(将相同的层应用于每个时间片),以获得5-d
输出。Dense
的情况是,在2.0版的keras
中,默认情况下,Dense
仅应用于最后一个维度(例如:如果将Dense(10)
应用于形状为(n, m, o, p)
输入,则将得到形状为(n, m, o, 10)
的输出),因此在本例中,Dense
和TimeDistributed(Dense)
是等效的。ljo96ir52#
字符串
TimeDistributed
层将包裹在其中的层应用于每个时间步,因此包裹在内部的dense_layer
的输入形状是(B, d_model)
,因此在应用dense_layer
和形状(d_model, 16)
的权重后,输出是(B, 16)
,对所有时间步执行此操作,我们得到形状(B, T, 16)
的输出。型
在不使用
TimeDistributed
的情况下,dense_layer
的输入形状为(B, T, d_model)
,因此权重维度为(d_model, 16)
,其应用于所有批次B
以给予输出形状(B, T, 16)
型
TimeDistributed
的Dense
按Batch
计算TimeDistributed
与Dense
按Timestep
计算