Класс MaxPooling2D
Класс MaxPooling2D применяется к двумерным
данным, например, к изображениям или картам
признаков сверточных слоев. Слой разбивает
входной тензор на окна заданного размера и
выбирает максимальное значение в каждом окне.
Первым параметром передается размер пула
pool_size, вторым - шаг strides,
третьим - тип заполнения padding.
Синтаксис
tf.keras.layers.MaxPooling2D(
pool_size=(2, 2),
strides=None,
padding='valid',
data_format=None
)
Пример
Давайте создадим слой максимального пулинга
с окном 2 на 2 и применим его
к двумерному тензору:
import tensorflow as tf
t = tf.constant([[[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]]], dtype=tf.float32)
t = tf.expand_dims(t, axis=-1)
layer = tf.keras.layers.MaxPooling2D(pool_size=(2, 2))
res = layer(t)
print(res.shape)
print(res.numpy())
Результат выполнения кода:
(1, 2, 2, 1)
[[[[ 6.]
[ 8.]]
[[14.]
[16.]]]]
Пример
Давайте изменим шаг пулинга с помощью
параметра strides:
import tensorflow as tf
t = tf.constant([[[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]]], dtype=tf.float32)
t = tf.expand_dims(t, axis=-1)
layer = tf.keras.layers.MaxPooling2D(pool_size=(2, 2), strides=(1, 1))
res = layer(t)
print(res.shape)
print(res.numpy())
Результат выполнения кода:
(1, 3, 3, 1)
[[[[ 6.]
[ 7.]
[ 8.]]
[[10.]
[11.]
[12.]]
[[14.]
[15.]
[16.]]]]
Пример
Давайте используем заполнение padding='same',
чтобы сохранить размерность выхода:
import tensorflow as tf
t = tf.constant([[[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]]], dtype=tf.float32)
t = tf.expand_dims(t, axis=-1)
layer = tf.keras.layers.MaxPooling2D(pool_size=(2, 2), padding='same')
res = layer(t)
print(res.shape)
print(res.numpy())
Результат выполнения кода:
(1, 2, 2, 1)
[[[[ 6.]
[ 8.]]
[[14.]
[16.]]]]
Пример
Давайте применим слой максимального пулинга в составе модели:
import tensorflow as tf
model = tf.keras.Sequential([
tf.keras.layers.Input(shape=(4, 4, 1)),
tf.keras.layers.MaxPooling2D(pool_size=(2, 2)),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(2, activation='softmax')
])
t = tf.constant([[[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]]], dtype=tf.float32)
t = tf.expand_dims(t, axis=-1)
res = model(t)
print(res.shape)
print(res.numpy())
Результат выполнения кода:
(1, 2)
[[0.5 0.5]]
Смотрите также
-
класс
MaxPooling1D,
который выполняет максимальный пулинг над одномерными данными -
класс
MaxPooling3D,
который выполняет максимальный пулинг над трехмерными данными -
класс
AveragePooling2D,
который выполняет усредняющий пулинг над двумерными данными -
класс
Conv2D,
который выполняет двумерную свертку над входными данными