tf.keras.layers.TimeDistributed(layer,
**kwargs
)
时间分布层主要用来对输入的数据的时间维度进行切片。在每个时间步长,依次输入一项,并且依次输出一项。
在上图中,时间分布层的作用就是在时间t输入数据w,输出数据x;在时间t1输入数据x,输出数据y。在每个时间片依次输入、输出一项数据,而不是直接输入多项,输出多项。
参数layer为一个tf.keras.layers.Layer实例。输入数据至少为一个三维张量,如果输入数据为文本序列数据,输入为一个三维张量,形状为(batch_size, time, output_dim),如果输入数据为视频数据,输入为一个五维张量,形状为(batch_size, time, height, width, channels)。
时间分布层用来处理具有时间维度的数据,对于图像这类不具有时间维度的数据不适用。
model = tf.keras.models.Sequential([
# 嵌入层
tf.keras.layers.Embedding(len(words), 125),
# LSTM层
tf.keras.layers.LSTM(125, return_sequences=True),
# LSTM层
tf.keras.layers.LSTM(125, return_sequences=True),
# 在时间维度上全连接的Dense层
tf.keras.layers.TimeDistributed(tf.keras.layers.Dense(len(words), activation="softmax"))
])
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
embedding (Embedding) (None, None, 125) 32000
lstm (LSTM) (None, None, 125) 125500
lstm_1 (LSTM) (None, None, 125) 125500
time_distributed (TimeDistr (None, None, 256) 32256
ibuted)
=================================================================
Total params: 315,256
Trainable params: 315,256
Non-trainable params: 0
_________________________________________________________________