tf.nn.max_pool
Выполняет максимальную пулинг-операцию для входных данных.
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 | Необязательное имя операции. |
| Возвращает | |
|---|---|
Тензор Tensor с форматом, заданным параметром data_format. Выходной тензор после максимального пулинга. |
| Вызывает исключения | |
|---|---|
ValueError | Если
|
© 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/api_docs/python/tf/nn/max_pool