Keras 中 TimeDistributed 层的作用是啥?
Posted
技术标签:
【中文标题】Keras 中 TimeDistributed 层的作用是啥?【英文标题】:What is the role of TimeDistributed layer in Keras?Keras 中 TimeDistributed 层的作用是什么? 【发布时间】:2018-04-28 13:44:20 【问题描述】:我正在尝试了解 TimeDistributed 包装器在 Keras 中的作用。
我知道 TimeDistributed “将一个层应用于输入的每个时间切片。”
但是我做了一些实验,得到了我无法理解的结果。
简而言之,对于 LSTM 层,TimeDistributed 和 just 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 层之间的区别?
【问题讨论】:
目前ssem没有区别,here有讨论。我认为最初的意图是区分Dense
层将输入展平然后重新整形,从而连接不同的时间步并具有更多参数,而TimeDistributed
保持时间步分离(因此具有更少的参数)。在您的情况下,Dense
应该有 500 个参数,TimeDistributed
只有 50
@gionni 不,它具有相同数量的参数(均为 6 个)。所以atm几乎没有区别?
是的,如果存在差异,这些参数就是它们的数量。暂时没有
【参考方案1】:
在keras
中——在构建顺序模型时——通常是第二个维度(样本维度之后的一个)——与time
维度相关。这意味着,例如,如果您的数据是5-dim
和(sample, time, width, length, channel)
,您可以使用TimeDistributed
(适用于4-dim
和(sample, width, length, channel)
)沿时间维度应用卷积层(将同一层应用于每个时间片)以获得5-d
输出。
Dense
的情况是 keras
从 2.0 版开始,Dense
默认仅应用于最后一个维度(例如,如果您将 Dense(10)
应用于形状为 (n, m, o, p)
的输入,您将获得输出形状 (n, m, o, 10)
) 所以在你的情况下 Dense
和 TimeDistributed(Dense)
是等价的。
【讨论】:
有一个使用 TimeDistributed 包装模型本身的示例。当这应用于Input
张量时,与仅将模型的map
应用于包含Input
的每个切片的列表相比,这有什么不同吗?以上是关于Keras 中 TimeDistributed 层的作用是啥?的主要内容,如果未能解决你的问题,请参考以下文章
Keras 中 TimeDistributed 层的作用是啥?
TimeDistributed 与 TimeDistributedDense Keras
LSTM 或任何其他层的 TimeDistributed 包装器有啥用途