Класс Conv2D
Класс Conv2D создает слой двумерной свертки.
Такой слой применяется к двумерным данным, например,
к изображениям, и извлекает из них локальные признаки.
Первым параметром передается число фильтров filters,
вторым - размер ядра свертки kernel_size.
Также можно указать шаг свертки strides,
тип дополнения padding и функцию активации
activation.
Синтаксис
tf.keras.layers.Conv2D(
filters,
kernel_size,
strides=(1, 1),
padding="valid",
activation=None
)
Пример
Давайте создадим слой свертки с четырьмя фильтрами
и ядром размера 3 на 3 и применим его
к тензор�� изображения:
import tensorflow as tf
tf.random.set_seed(0)
layer = tf.keras.layers.Conv2D(filters=4, kernel_size=(3, 3))
t = tf.constant([[[[1], [2], [3]],
[[4], [5], [6]],
[[7], [8], [9]]]])
res = layer(t)
print(res.shape)
Результат выполнения кода:
(1, 1, 1, 4)
Пример
Давайте создадим слой свертки с функцией активации
relu и дополнением same, чтобы размер
выхода совпадал с размером входа:
import tensorflow as tf
tf.random.set_seed(0)
layer = tf.keras.layers.Conv2D(
filters=2,
kernel_size=(3, 3),
padding="same",
activation="relu"
)
t = tf.constant([[[[1], [2], [3]],
[[4], [5], [6]],
[[7], [8], [9]]]])
res = layer(t)
print(res.shape)
Результат выполнения кода:
(1, 3, 3, 2)
Пример
Давайте создадим слой свертки с шагом 2
и применим его к тензору с тремя каналами:
import tensorflow as tf
tf.random.set_seed(0)
layer = tf.keras.layers.Conv2D(
filters=8,
kernel_size=(3, 3),
strides=(2, 2)
)
t = tf.constant([[[[1, 2, 3], [4, 5, 6], [7, 8, 9], [1, 2, 3]],
[[4, 5, 6], [7, 8, 9], [1, 2, 3], [4, 5, 6]],
[[7, 8, 9], [1, 2, 3], [4, 5, 6], [7, 8, 9]],
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [1, 2, 3]]]])
res = layer(t)
print(res.shape)
Результат выполнения кода:
(1, 1, 1, 8)
Пример
Давайте встроим слой свертки в последовательную модель и выведем сводку по ней:
import tensorflow as tf
tf.random.set_seed(0)
model = tf.keras.Sequential([
tf.keras.layers.Input(shape=(4, 4, 1)),
tf.keras.layers.Conv2D(filters=2, kernel_size=(3, 3)),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(units=1)
])
model.summary()
<-python+>
Результат выполнения кода:
"Model: \"sequential\""
Смотрите также
-
слой
Conv1D,
который создает одномерную свертку -
слой
Conv3D,
который создает трехмерную свертку -
слой
Conv2DTranspose,
который выполняет обратную свертку -
слой
MaxPooling2D,
который выполняет двумерную субдискретизацию