在Keras中,TimeDistributed层的作用是什么?

在Keras中,TimeDistributed层的作用是什么?

关键词:python,machine-learning,keras,neural-network,deep-learning

今天,在做关于时间序列的数据时,遇到了一个问题。看 transformer 时,遇到源码中用到了 Keras 的 TimeDistributed wrapper,但是参数量竟然与 Keras 的 Dense 中的参数是一样的,这就奇怪了,那么就用数据来测试一下到底这两个东西有啥区别吧。

首先,列出别人也遇到的问题。

Q:
我试图了解TimeDistributed包装器在Keras中的作用。

我得到关于 TimeDistributed 的解释是: “该层应用于输入的每个时间片”。

但是我做了一些实验,却得到了我无法理解的结果。

简而言之,对于LSTM层,TimeDistributed 和仅仅用 Dense 层的结果相同。

from keras.models import Sequential
from keras.layers import Dense, Activation, LSTM, TimeDistributed

model = Sequential()
model.add(LSTM(5, input_shape = (10, 20), return_sequences = True))
model.add(TimeDistributed(Dense(1)))
model.summary()
print(model.output_shape)

model = Sequential()
model.add(LSTM(5, input_shape = (10, 20), return_sequences = True))
model.add((Dense(1)))
model.summary()
print(model.output_shape)

# 下面是输出预览,可见是一样的,我的 Keras 版本是:2.1.2
# 我对参数计算的理解: ((20+5)*5+5)*4 + 5*1+1 = 526 
# PS: 如有不对,还请评论中提出,一起学习。参数计算就得看自己对 LSTM 和 Dense 相关知识的理解了。
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
lstm_4 (LSTM)                (None, 10, 5)             520       
_________________________________________________________________
time_distributed_3 (TimeDist (None, 10, 1)             6         
=================================================================
Total params: 526
Trainable params: 526
Non-trainable params: 0
_________________________________________________________________
(None, 10, 1)
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
lstm_5 (LSTM)                (None, 10, 5)             520       
_________________________________________________________________
dense_4 (Dense)              (None, 10, 1)             6         
=================================================================
Total params: 526
Trainable params: 526
Non-trainable params: 0
_________________________________________________________________
(None, 10, 1)

对于这两个模型,我得到了同样的输出 (None, 10, 1)。

在RNN层之后,谁能解释 TimeDistributedDense 层之间的区别?


目前看来没有什么不同,在这里 有一个相关的讨论。

我认为最初的意图是区分 Dense 层是将输入压平然后再进行整形,从而连接不同的时间步长并拥有更多的参数,而 TimeDistributed 将时间步长分隔开来(因此拥有更少的参数)。

在你的情况下,Dense 应该有500个参数,而 TimeDistributed 只有50。

by – gionni


不,它有相同数量的参数(都是6个)。

by – Buomsee Kim


没错,如果有差异,这些就是参数的数量。

by – gionni

Answer:
keras 中,当构建一个序列模型时,通常第二个维度(一个后样本维度)与时间维度相关。例如,这意味着,如果您的数据是5-dim(样本、时间、宽度、长度、信道)可以应用卷积层使用 TimeDistributed (适用于4-dim与(样本、宽度、长度、渠道))在时间维度(应用同一层每个时间片)为了获得5-d的输出。

Dense 的情况是,在keras从2.0版默认情况下应用于最后的维度(如果你在输入形状(n, m o p)时,用 Dense(10) 你会得到输出与形状(n, m o 10))。在你的情况下 DenseTimeDistributed(Dense) 是等价的。

by – Marcin Możejko

from:https://stackoverflow.com/questions/47305618/what-is-the-role-of-timedistributed-layer-in-keras

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值