Класс ConvLSTM2D
Класс ConvLSTM2D представляет собой сверточный рекуррентный слой,
который сочетает свертку над пространственными измерениями с механизмом
LSTM по временной оси. Такой слой принимает на вход пятимерный тензор
с формой (samples, time, rows, cols, channels) и возвращает
последовательность или один тензор в зависимости от параметра
return_sequences. Первым параметром передается число фильтров
filters, вторым - размер ядра kernel_size, третьим -
шаг свертки strides, а также функция активации
activation и параметр return_sequences.
Синтаксис
tf.keras.layers.ConvLSTM2D(
filters,
kernel_size,
strides=(1, 1),
padding='valid',
data_format=None,
dilation_rate=(1, 1),
activation='tanh',
recurrent_activation='sigmoid',
use_bias=True,
kernel_initializer='glorot_uniform',
recurrent_initializer='orthogonal',
bias_initializer='zeros',
unit_forget_bias=True,
kernel_regularizer=None,
recurrent_regularizer=None,
bias_regularizer=None,
activity_regularizer=None,
kernel_constraint=None,
recurrent_constraint=None,
bias_constraint=None,
return_sequences=False,
return_state=False,
go_backwards=False,
stateful=False,
dropout=0.0,
recurrent_dropout=0.0
)
Пример
Давайте создадим слой ConvLSTM2D с четырьмя фильтрами
и ядром размера 3 на 3 и применим его к
последовательности из пяти временных шагов:
import tensorflow as tf
tf.random.set_seed(0)
layer = tf.keras.layers.ConvLSTM2D(
filters=4,
kernel_size=(3, 3),
padding='same',
return_sequences=True
)
x = tf.random.normal((1, 5, 8, 8, 3))
res = layer(x)
print(res.shape)
Результат выполнения кода:
(1, 5, 8, 8, 4)
Пример
Давайте вернем только последний временной шаг, установив
return_sequences=False:
import tensorflow as tf
tf.random.set_seed(0)
layer = tf.keras.layers.ConvLSTM2D(
filters=4,
kernel_size=(3, 3),
padding='same',
return_sequences=False
)
x = tf.random.normal((1, 5, 8, 8, 3))
res = layer(x)
print(res.shape)
Результат выполнения кода:
(1, 8, 8, 4)
Пример
Давайте построим модель с двумя слоями ConvLSTM2D
для обработки видеопоследовательности:
import tensorflow as tf
tf.random.set_seed(0)
model = tf.keras.Sequential([
tf.keras.layers.Input(shape=(5, 16, 16, 3)),
tf.keras.layers.ConvLSTM2D(
filters=8,
kernel_size=(3, 3),
padding='same',
return_sequences=True
),
tf.keras.layers.ConvLSTM2D(
filters=4,
kernel_size=(3, 3),
padding='same',
return_sequences=False
),
tf.keras.layers.GlobalAveragePooling2D(),
tf.keras.layers.Dense(1, activation='sigmoid')
])
model.summary()
Результат выполнения кода:
Model: "sequential"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv_lstm2d (ConvLSTM2D) │ (None, 5, 16, 16, 8) │ 3,200 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv_lstm2d_1 (ConvLSTM2D) │ (None, 16, 16, 4) │ 1,744 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ global_average_pooling2d │ (None, 4) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense (Dense) │ (None, 1) │ 5 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 4,949
Trainable params: 4,949
Non-trainable params: 0
Смотрите также
-
слой
LSTM,
который реализует рекуррентный слой долгой краткосрочной памяти -
слой
Conv2D,
который выполняет двумерную свертку над изображениями -
слой
Conv3D,
который выполняет трехмерную свертку над объемными данными -
слой
TimeDistributed,
который применяет слой к каждому временному шагу последовательности