keras.layers.TimeDistributed(layer)
這個封裝器將一個層應用於輸入的每個時間片。
輸入至少爲 3D,且第一個維度應該是時間所表示的維度。
考慮 32 個樣本的一個 batch, 其中每個樣本是 10 個 16 維向量的序列。 那麼這個 batch 的輸入尺寸爲 (32, 10, 16)
, 而 input_shape
不包含樣本數量的維度,爲 (10, 16)
。
你可以使用 TimeDistributed
來將 Dense
層獨立地應用到 這 10 個時間步的每一個:
# 作爲模型第一層
model = Sequential()
model.add(TimeDistributed(Dense(8), input_shape=(10, 16)))
# 現在 model.output_shape == (None, 10, 8)
輸出的尺寸爲 (32, 10, 8)
。
在後續的層中,將不再需要 input_shape
:
model.add(TimeDistributed(Dense(32)))
# 現在 model.output_shape == (None, 10, 32)
輸出的尺寸爲 (32, 10, 32)
。
TimeDistributed
可以應用於任意層,不僅僅是 Dense
, 例如運用於 Conv2D
層:
model = Sequential()
model.add(TimeDistributed(Conv2D(64, (3, 3)),
input_shape=(10, 299, 299, 3)))