keras-cn icon indicating copy to clipboard operation
keras-cn copied to clipboard

如何理解 timedistributed包装器

Open boozyguo opened this issue 8 years ago • 3 comments

在文档中关于TimeDistributed包装器,描述如下:

keras.layers.wrappers.TimeDistributed(layer) 该包装器可以把一个层应用到输入的每一个时间步上 参数 layer:Keras层对象 输入至少为3D张量,下标为1的维度将被认为是时间维 例如,考虑一个含有32个样本的batch,每个样本都是10个向量组成的序列,每个向量长为16,则其输入维度为(32,10,16),其不包含batch大小的input_shape为(10,16) 我们可以使用包装器TimeDistributed包装Dense,以产生针对各个时间步信号的独立全连接:

as the first layer in a model

model = Sequential() model.add(TimeDistributed(Dense(8), input_shape=(10, 16)))

now model.output_shape == (None, 10, 8)

subsequent layers: no need for input_shape

model.add(TimeDistributed(Dense(32)))

now model.output_shape == (None, 10, 32)

程序的输出数据shape为(32,10,8)

具体问题是: “把一个层应用到输入的每一个时间步上”改怎么理解? 比如dense层,本来就是应用的全部输入上,那么和应用到输入的每个时间步上是什么区别? “针对各个时间步信号的独立全连接”这里的“独立全连接”是什么意思? 例子中 model.add(TimeDistributed(Dense(8), input_shape=(10, 16)))

now model.output_shape == (None, 10, 8)

这个每次输入是长度16的1个向量,输出是长度8的1个向量?这个是否正确?

谢谢!

boozyguo avatar Oct 31 '16 06:10 boozyguo

@boozyguo 如果将时序信号看作是2D矩阵,则TimeDistributed包装后的Dense就是分别对矩阵的每一行进行全连接。 我对时序信号了解不多,理解或许有误,如有错误还请指正。

MoyanZitto avatar Nov 04 '16 07:11 MoyanZitto

@boozyguo 这个每次输入是长度16的1个向量,输出是长度8的1个向量?这个是否正确?

谢谢!的确是这样的,每次输入长16的向量,分10次输入到同一个网络

Lamyaaa avatar Oct 26 '17 14:10 Lamyaaa