TimeDistributed应用一个layer到每个时间步
-
输入至少是三维(层的build函数里会判断),index 1 被认为是时间步的维度
-
举个例子 输入
(32,10,16)
batch_size=32 sequence_length=10 hidden_size=16,应用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)
-
输出维度
(32, 10, 8)
. -
后续的层则不需要再输入
input_shape
model.add(TimeDistributed(Dense(32))) # now model.output_shape == (None, 10, 32)
-
输出
(32, 10, 32)
. -
TimeDistributed
能够被任意层使用,不仅仅是Dense,例如Conv2D
layer:model = Sequential() model.add(TimeDistributed(Conv2D(64, (3, 3)), input_shape=(10, 299, 299, 3)))
-
最后一个小问题,代码里的解释有个
independently
字眼,传入的Dense是独立怎么理解,这里应该是对每个时间步独立运行,但是传入的Dense都是一个,这里可以从参数数量上验证下 -
timedistributed_2 (TimeDistribute) (None, 32, 5) 325 bidirectional_1[0][0]
从一个64维到5维的TimeDistribute的参数数量为325 64*5+5=325