keras-cn
keras-cn copied to clipboard
如何理解 timedistributed包装器
在文档中关于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 如果将时序信号看作是2D矩阵,则TimeDistributed包装后的Dense就是分别对矩阵的每一行进行全连接。 我对时序信号了解不多,理解或许有误,如有错误还请指正。
@boozyguo 这个每次输入是长度16的1个向量,输出是长度8的1个向量?这个是否正确?
谢谢!的确是这样的,每次输入长16的向量,分10次输入到同一个网络