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