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)) 所以在你的情况下 DenseTimeDistributed(Dense) 是等价的。

【讨论】:

有一个使用 TimeDistributed 包装模型本身的示例。当这应用于Input 张量时,与仅将模型的map 应用于包含Input 的每个切片的列表相比,这有什么不同吗?

以上是关于Keras 中 TimeDistributed 层的作用是啥?的主要内容,如果未能解决你的问题,请参考以下文章

keras中TimeDistributed的用法

Keras 中 TimeDistributed 层的作用是啥?

TimeDistributed 与 TimeDistributedDense Keras

LSTM 或任何其他层的 TimeDistributed 包装器有啥用途

Keras 使用 TimeDistributed 预训练 CNN

为keras TimeDistributed图层按名称设置权重