# Pooling

The pooling ops sweep a rectangular window over the input tensor, computing a reduction operation for each window (average, max, or max with argmax). Each pooling op uses rectangular windows of size ksize separated by offset strides. For example, if strides is all ones every window is used, if strides is all twos every other window is used in each dimension, etc.

In detail, the output is

output[i] = reduce(value[strides * i:strides * i + ksize])


where the indices also take into consideration the padding values. Please refer to the Convolution section for details about the padding calculation.

### tf.nn.avg_pool(value, ksize, strides, padding, data_format='NHWC', name=None)

Performs the average pooling on the input.

Each entry in output is the mean of the corresponding size ksize window in value.

##### Args:
• value: A 4-D Tensor of shape [batch, height, width, channels] and type float32, float64, qint8, quint8, or qint32.
• ksize: A list of ints that has length >= 4. The size of the window for each dimension of the input tensor.
• strides: A list of ints that has length >= 4. The stride of the sliding window for each dimension of the input tensor.
• padding: A string, either 'VALID' or 'SAME'. The padding algorithm. See the comment here
• data_format: A string. 'NHWC' and 'NCHW' are supported.
• name: Optional name for the operation.
##### Returns:

A Tensor with the same type as value. The average pooled output tensor.

### tf.nn.max_pool(value, ksize, strides, padding, data_format='NHWC', name=None)

Performs the max pooling on the input.

##### Args:
• value: A 4-D Tensor with shape [batch, height, width, channels] and type tf.float32.
• ksize: A list of ints that has length >= 4. The size of the window for each dimension of the input tensor.
• strides: A list of ints that has length >= 4. The stride of the sliding window for each dimension of the input tensor.
• padding: A string, either 'VALID' or 'SAME'. The padding algorithm. See the comment here
• data_format: A string. 'NHWC' and 'NCHW' are supported.
• name: Optional name for the operation.
##### Returns:

A Tensor with type tf.float32. The max pooled output tensor.

### tf.nn.max_pool_with_argmax(input, ksize, strides, padding, Targmax=None, name=None)

Performs max pooling on the input and outputs both max values and indices.

The indices in argmax are flattened, so that a maximum value at position [b, y, x, c] becomes flattened index ((b * height + y) * width + x) * channels + c.

##### Args:
• input: A Tensor. Must be one of the following types: float32, half. 4-D with shape [batch, height, width, channels]. Input to pool over.
• ksize: A list of ints that has length >= 4. The size of the window for each dimension of the input tensor.
• strides: A list of ints that has length >= 4. The stride of the sliding window for each dimension of the input tensor.
• padding: A string from: "SAME", "VALID". The type of padding algorithm to use.
• Targmax: An optional tf.DType from: tf.int32, tf.int64. Defaults to tf.int64.
• name: A name for the operation (optional).
##### Returns:

A tuple of Tensor objects (output, argmax).

• output: A Tensor. Has the same type as input. The max pooled output tensor.
• argmax: A Tensor of type Targmax. 4-D. The flattened indices of the max values chosen for each output.

### tf.nn.avg_pool3d(input, ksize, strides, padding, name=None)

Performs 3D average pooling on the input.

##### Args:
• input: A Tensor. Must be one of the following types: float32, float64, int64, int32, uint8, uint16, int16, int8, complex64, complex128, qint8, quint8, qint32, half. Shape [batch, depth, rows, cols, channels] tensor to pool over.
• ksize: A list of ints that has length >= 5. 1-D tensor of length 5. The size of the window for each dimension of the input tensor. Must have ksize[0] = ksize[4] = 1.
• strides: A list of ints that has length >= 5. 1-D tensor of length 5. The stride of the sliding window for each dimension of input. Must have strides[0] = strides[4] = 1.
• padding: A string from: "SAME", "VALID". The type of padding algorithm to use.
• name: A name for the operation (optional).
##### Returns:

A Tensor. Has the same type as input. The average pooled output tensor.

### tf.nn.max_pool3d(input, ksize, strides, padding, name=None)

Performs 3D max pooling on the input.

##### Args:
• input: A Tensor. Must be one of the following types: float32, float64, int64, int32, uint8, uint16, int16, int8, complex64, complex128, qint8, quint8, qint32, half. Shape [batch, depth, rows, cols, channels] tensor to pool over.
• ksize: A list of ints that has length >= 5. 1-D tensor of length 5. The size of the window for each dimension of the input tensor. Must have ksize[0] = ksize[4] = 1.
• strides: A list of ints that has length >= 5. 1-D tensor of length 5. The stride of the sliding window for each dimension of input. Must have strides[0] = strides[4] = 1.
• padding: A string from: "SAME", "VALID". The type of padding algorithm to use.
• name: A name for the operation (optional).
##### Returns:

A Tensor. Has the same type as input. The max pooled output tensor.