Класс MaxPooling3D
Класс MaxPooling3D применяется к трехмерным данным,
например, к видеопоследовательностям или объемным изображениям.
Слой разбивает входной тензор на окна заданного размера
и выбирает максимальное значение в каждом окне.
Первым параметром передается размер пулинг-окна pool_size,
вторым - шаг смещения окна strides.
Также можно указать тип заполнения границ padding
и тип данных dtype.
Синтаксис
tf.keras.layers.MaxPooling3D(
pool_size=(2, 2, 2),
strides=None,
padding="valid",
data_format=None,
dtype=None
)
Пример
Давайте создадим слой MaxPooling3D с размером окна
2 на 2 на 2 и применим его к тензору
размером 4 на 4 на 4 с одним каналом:
import tensorflow as tf
t = tf.constant([[[[1], [2], [3], [4]],
[[5], [6], [7], [8]],
[[9], [10], [11], [12]],
[[13], [14], [15], [16]]],
[[[17], [18], [19], [20]],
[[21], [22], [23], [24]],
[[25], [26], [27], [28]],
[[29], [30], [31], [32]]],
[[[33], [34], [35], [36]],
[[37], [38], [39], [40]],
[[41], [42], [43], [44]],
[[45], [46], [47], [48]]],
[[[49], [50], [51], [52]],
[[53], [54], [55], [56]],
[[57], [58], [59], [60]],
[[61], [62], [63], [64]]]])
layer = tf.keras.layers.MaxPooling3D(pool_size=(2, 2, 2))
res = layer(t)
print(res.shape)
print(res)
Результат выполнения кода:
(1, 2, 2, 2, 1)
tf.Tensor(
[[[[[ 6.]
[ 8.]]
[[14.]
[16.]]]
[[[38.]
[40.]]
[[46.]
[48.]]]]], shape=(1, 2, 2, 2, 1), dtype=float32)
Пример
Давайте применим слой MaxPooling3D с шагом
2 на 2 на 2 и заполнением границ
same:
Результат выполнения кода:
(1, 2, 2, 2, 1)
tf.Tensor(
[[[[[5.]
[6.]]
[[8.]
[9.]]]
[[[5.]
[6.]]
[[8.]
[9.]]]]], shape=(1, 2, 2, 2, 1), dtype=float32)
Пример
Давайте создадим модель с входным слоем Input,
слоем Conv3D и слоем MaxPooling3D
для обработки объемных данных:
import tensorflow as tf
model = tf.keras.Sequential([
tf.keras.layers.Input(shape=(8, 8, 8, 1)),
tf.keras.layers.Conv3D(2, kernel_size=(3, 3, 3), activation="relu"),
tf.keras.layers.MaxPooling3D(pool_size=(2, 2, 2))
])
print(model.input_shape)
print(model.output_shape)
Результат выполнения кода:
(None, 8, 8, 8, 1)
(None, 3, 3, 3, 2)
Смотрите также
-
класс
MaxPooling1D,
который выполняет максимальный пулинг над одномерными данными -
класс
MaxPooling2D,
который выполняет максимальный пулинг над двумерными данными -
класс
Conv3D,
который выполняет трехмерную свертку над входными данными -
класс
AveragePooling2D,
который выполняет усредняющий пулинг над двумерными данными