tf.nn.max_pool
| Просмотреть исходный код на GitHub |
Выполняет максимальное пулинговое преобразование входных данных.
tf.nn.max_pool(
input, ksize, strides, padding, data_format=None, name=None
)
Для заданного окна ksize, выбирает максимальное значение внутри этого окна. Используется для сокращения вычислений и предотвращения переобучения.
Рассмотрим пример пулинга с 2x2 неперекрывающимися окнами:
matrix = tf.constant([
[0, 0, 1, 7],
[0, 2, 0, 0],
[5, 2, 0, 0],
[0, 0, 9, 8],
])
reshaped = tf.reshape(matrix, (1, 4, 4, 1))
tf.nn.max_pool(reshaped, ksize=2, strides=2, padding="SAME")
<tf.Tensor: shape=(1, 2, 2, 1), dtype=int32, numpy=
array([[[[2],
[7]],
[[5],
[9]]]], dtype=int32)>
Мы можем изменить размер окна с помощью параметра ksize. Например, если мы расширим окно до 3:
tf.nn.max_pool(reshaped, ksize=3, strides=2, padding="SAME")
<tf.Tensor: shape=(1, 2, 2, 1), dtype=int32, numpy=
array([[[[5],
[7]],
[[9],
[9]]]], dtype=int32)>
Теперь мы получили два дополнительных больших числа (5 и 9) в двух из пулинговых точек.
Обратите внимание, что наши окна теперь перекрываются, так как мы все еще перемещаемся на 2 единицы на каждом шаге. Это приводит к тому, что мы видим то же самое число 9 дважды, так как оно входит в два перекрывающихся окна.
Мы можем изменить расстояние, на которое мы перемещаем наше окно на каждом шаге, используя параметр strides. Обновление этого значения до значения, равного размеру окна, устраняет перекрытие:
tf.nn.max_pool(reshaped, ksize=3, strides=3, padding="SAME")
<tf.Tensor: shape=(1, 2, 2, 1), dtype=int32, numpy=
array([[[[2],
[7]],
[[5],
[9]]]], dtype=int32)>
Поскольку окно не полностью помещается в наш вход, вокруг краев добавляется заполнение, что дает нам тот же результат, что и при использовании окна 2x2. Мы можем вообще пропустить заполнение и просто отбросить окна, которые не полностью помещаются в наш вход, передав "VALID" аргументу padding:
tf.nn.max_pool(reshaped, ksize=3, strides=3, padding="VALID") <tf.Tensor: shape=(1, 1, 1, 1), dtype=int32, numpy=array([[[[5]]]], dtype=int32)>
Теперь мы взяли наибольшее значение в окне 3x3, начиная с верхнего левого угла. Поскольку другие окна не помещаются в наш вход, они отбрасываются.
| Аргументы | |
|---|---|
input | Тензор ранга N+2, с формой [batch_size] + input_spatial_shape + [num_channels] если data_format не начинается с "NC" (по умолчанию), или [batch_size, num_channels] + input_spatial_shape если data_format начинается с "NC". Пулинговое преобразование происходит только по пространственным измерениям. |
ksize | Целое число или список ints, длина которого 1, N или N+2. Размер окна для каждого измерения входного тензора. |
strides | Целое число или список ints, длина которого 1, N или N+2. Шаг скользящего окна для каждого измерения входного тензора. |
padding | Либо string "SAME" или "VALID", указывающие тип алгоритма заполнения, или список, указывающий явное заполнение в начале и в конце каждого измерения. Смотрите здесь для получения дополнительной информации. При использовании явного заполнения и data_format "NHWC", это должно быть в форме [[0, 0], [pad_top, pad_bottom], [pad_left, pad_right], [0, 0]]. При использовании явного заполнения и data_format "NCHW", это должно быть в форме [[0, 0], [0, 0], [pad_top, pad_bottom], [pad_left, pad_right]]. При использовании явного заполнения размер заполнения не может быть больше размера скользящего окна. |
data_format | Строка. Указывает измерение канала. Для N=1 может быть либо "NWC" (по умолчанию), либо "NCW", для N=2 может быть либо "NHWC" (по умолчанию), либо "NCHW", а для N=3 либо "NDHWC" (по умолчанию), либо "NCDHW". |
name | Необязательное имя операции. |
| Возвращаемое значение | |
|---|---|
A Tensor формата, указанного в data_format. Тензор результата максимального пулингового преобразования. |
© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.9/api_docs/python/tf/nn/max_pool