Класс TimeDistributed
Класс TimeDistributed оборачивает другой слой и применяет его к каждому временному шагу входного тензора независимо. Это позволяет использовать обычные слои, такие как Dense или Conv2D, для обработки последовательностей. Первым параметром класс принимает слой, который нужно обернуть. Вторым параметром можно передать дополнительные аргументы, например input_shape.
Синтаксис
tf.keras.layers.TimeDistributed(layer, **kwargs)
Пример
Давайте создадим модель с оберткой TimeDistributed вокруг слоя Dense и применим ее к последовательности:
import tensorflow as tf
tf.random.set_seed(0)
model = tf.keras.Sequential([
tf.keras.layers.TimeDistributed(
tf.keras.layers.Dense(4),
input_shape=(3, 5)
)
])
t = tf.constant([[[1.0, 2.0, 3.0, 4.0, 5.0],
[6.0, 7.0, 8.0, 9.0, 10.0],
[11.0, 12.0, 13.0, 14.0, 15.0]]])
res = model(t)
print(res.shape)
Результат выполнения кода:
(1, 3, 4)
Пример
Давайте применим TimeDistributed к слою Conv2D для обработки последовательности изображений:
import tensorflow as tf
tf.random.set_seed(0)
model = tf.keras.Sequential([
tf.keras.layers.TimeDistributed(
tf.keras.layers.Conv2D(2, (3, 3), activation='relu'),
input_shape=(4, 8, 8, 1)
)
])
t = tf.random.normal((1, 4, 8, 8, 1))
res = model(t)
print(res.shape)
Результат выполнения кода:
(1, 4, 6, 6, 2)
Пример
Давайте используем TimeDistributed с слоем Flatten для преобразования каждого временного шага:
Результат выполнения кода:
(1, 2, 12)
Смотрите также
-
слой
Dense,
который часто оборачивается в TimeDistributed -
слой
LSTM,
который работает с последовательностями напрямую -
слой
Bidirectional,
который обрабатывает последовательности в двух направлениях -
слой
RepeatVector,
который повторяет вектор для создания последовательности