Класс Conv2DTranspose
Класс Conv2DTranspose применяется для увеличения пространственных размеров изображения или карты признаков. Его часто называют слоем деконволюции, хотя математически он выполняет именно транспонированную свертку, а не обратную операцию. Слой принимает на вход четырехмерный тензор формы (batch, height, width, channels) и возвращает тензор с увеличенными высотой и шириной. Первым параметром передается число фильтров (целое число), вторым - размер ядра свертки (кортеж из двух чисел), третьим - шаг свертки strides, который определяет коэффициент увеличения. Также можно указать тип отступов padding (значения 'valid' или 'same') и функцию активации activation.
Синтаксис
tf.keras.layers.Conv2DTranspose(
filters,
kernel_size,
strides=(1, 1),
padding='valid',
output_padding=None,
data_format=None,
dilation_rate=(1, 1),
activation=None,
use_bias=True,
kernel_initializer='glorot_uniform',
bias_initializer='zeros'
)
Пример
Давайте создадим слой Conv2DTranspose с четырьмя фильтрами, ядром 3 на 3 и шагом 2. Подадим на вход тензор формы (1, 4, 4, 1) и посмотрим на форму выходного тензора:
import tensorflow as tf
layer = tf.keras.layers.Conv2DTranspose(
filters=4,
kernel_size=(3, 3),
strides=(2, 2),
padding='same'
)
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], [16.0]]]])
res = layer(t)
print(res.shape)
Результат выполнения кода:
(1, 8, 8, 4)
Пример
Давайте создадим слой с отступами 'valid' и шагом 3, чтобы увидеть, как меняется размер выходного тензора:
import tensorflow as tf
layer = tf.keras.layers.Conv2DTranspose(
filters=2,
kernel_size=(3, 3),
strides=(3, 3),
padding='valid'
)
t = tf.constant([[[[1.0], [2.0], [3.0]],
[[4.0], [5.0], [6.0]],
[[7.0], [8.0], [9.0]]]])
res = layer(t)
print(res.shape)
Результат выполнения кода:
(1, 11, 11, 2)
Пример
Давайте применим слой Conv2DTranspose с функцией активации relu и выведем значения первого канала:
Результат выполнения кода:
tf.Tensor(
[[0. 0. 0. 0. ]
[0. 0.7928426 1.1888263 0. ]
[0. 1.5856853 1.981669 0. ]
[0. 0. 0. 0. ]], shape=(4, 4), dtype=float32)
Смотрите также
-
класс
Conv2D,
который выполняет двумерную свертку -
класс
UpSampling2D,
который увеличивает размеры изображения простым повторением -
класс
ZeroPadding2D,
который добавляет нулевые отступы по краям -
класс
Conv1D,
который выполняет одномерную свертку