Main Content

maxPooling2dLayer

Max pooling layer

Description

A 2-D max pooling layer performs downsampling by dividing the input into rectangular pooling regions, then computing the maximum of each region.

Creation

Description

layer = maxPooling2dLayer(poolSize) creates a max pooling layer and sets the PoolSize property.

example

layer = maxPooling2dLayer(poolSize,Name,Value) sets the optional Stride, Name, and HasUnpoolingOutputs properties using name-value pairs. To specify input padding, use the 'Padding' name-value pair argument. For example, maxPooling2dLayer(2,'Stride',3) creates a max pooling layer with pool size [2 2] and stride [3 3]. You can specify multiple name-value pairs. Enclose each property name in single quotes.

Input Arguments

expand all

Name-Value Arguments

Use comma-separated name-value pair arguments to specify the size of the padding to add along the edges of the layer input and to set the Stride, Name, and HasUnpoolingOutputs properties. Enclose names in single quotes.

Example: maxPooling2dLayer(2,'Stride',3) creates a max pooling layer with pool size [2 2] and stride [3 3].

Input edge padding, specified as the comma-separated pair consisting of 'Padding' and one of these values:

  • 'same' — Add padding of size calculated by the software at training or prediction time so that the output has the same size as the input when the stride equals 1. If the stride is larger than 1, then the output size is ceil(inputSize/stride), where inputSize is the height or width of the input and stride is the stride in the corresponding dimension. The software adds the same amount of padding to the top and bottom, and to the left and right, if possible. If the padding that must be added vertically has an odd value, then the software adds extra padding to the bottom. If the padding that must be added horizontally has an odd value, then the software adds extra padding to the right.

  • Nonnegative integer p — Add padding of size p to all the edges of the input.

  • Vector [a b] of nonnegative integers — Add padding of size a to the top and bottom of the input and padding of size b to the left and right.

  • Vector [t b l r] of nonnegative integers — Add padding of size t to the top, b to the bottom, l to the left, and r to the right of the input.

Example: 'Padding',1 adds one row of padding to the top and bottom, and one column of padding to the left and right of the input.

Example: 'Padding','same' adds padding so that the output has the same size as the input (if the stride equals 1).

Properties

expand all

Max Pooling

Dimensions of the pooling regions, specified as a vector of two positive integers [h w], where h is the height and w is the width. When creating the layer, you can specify PoolSize as a scalar to use the same value for both dimensions.

If the stride dimensions Stride are less than the respective pooling dimensions, then the pooling regions overlap.

The padding dimensions PaddingSize must be less than the pooling region dimensions PoolSize.

Example: [2 1] specifies pooling regions of height 2 and width 1.

Step size for traversing the input vertically and horizontally, specified as a vector of two positive integers [a b], where a is the vertical step size and b is the horizontal step size. When creating the layer, you can specify Stride as a scalar to use the same value for both dimensions.

If the stride dimensions Stride are less than the respective pooling dimensions, then the pooling regions overlap.

The padding dimensions PaddingSize must be less than the pooling region dimensions PoolSize.

Example: [2 3] specifies a vertical step size of 2 and a horizontal step size of 3.

Size of padding to apply to input borders, specified as a vector [t b l r] of four nonnegative integers, where t is the padding applied to the top, b is the padding applied to the bottom, l is the padding applied to the left, and r is the padding applied to the right.

When you create a layer, use the 'Padding' name-value pair argument to specify the padding size.

Example: [1 1 2 2] adds one row of padding to the top and bottom, and two columns of padding to the left and right of the input.

Method to determine padding size, specified as 'manual' or 'same'.

The software automatically sets the value of PaddingMode based on the 'Padding' value you specify when creating a layer.

  • If you set the 'Padding' option to a scalar or a vector of nonnegative integers, then the software automatically sets PaddingMode to 'manual'.

  • If you set the 'Padding' option to 'same', then the software automatically sets PaddingMode to 'same' and calculates the size of the padding at training time so that the output has the same size as the input when the stride equals 1. If the stride is larger than 1, then the output size is ceil(inputSize/stride), where inputSize is the height or width of the input and stride is the stride in the corresponding dimension. The software adds the same amount of padding to the top and bottom, and to the left and right, if possible. If the padding that must be added vertically has an odd value, then the software adds extra padding to the bottom. If the padding that must be added horizontally has an odd value, then the software adds extra padding to the right.

Note

Padding property will be removed in a future release. Use PaddingSize instead. When creating a layer, use the 'Padding' name-value pair argument to specify the padding size.

Size of padding to apply to input borders vertically and horizontally, specified as a vector [a b] of two nonnegative integers, where a is the padding applied to the top and bottom of the input data and b is the padding applied to the left and right.

Example: [1 1] adds one row of padding to the top and bottom, and one column of padding to the left and right of the input.

Flag for outputs to unpooling layer, specified as true or false.

If the HasUnpoolingOutputs value equals false, then the max pooling layer has a single output with the name 'out'.

To use the output of a max pooling layer as the input to a max unpooling layer, set the HasUnpoolingOutputs value to true. In this case, the max pooling layer has two additional outputs that you can connect to a max unpooling layer:

  • 'indices' — Indices of the maximum value in each pooled region.

  • 'size' — Size of the input feature map.

To enable outputs to a max unpooling layer, the pooling regions of the max pooling layer must be nonoverlapping.

For more information on how to unpool the output of a max pooling layer, see maxUnpooling2dLayer.

Layer

Layer name, specified as a character vector or a string scalar. For Layer array input, the trainnet, trainNetwork, assembleNetwork, layerGraph, and dlnetwork functions automatically assign names to layers with the name "".

The MaxPooling2DLayer object stores this property as a character vector.

Data Types: char | string

This property is read-only.

Number of inputs to the layer, returned as 1. This layer accepts a single input only.

Data Types: double

This property is read-only.

Input names, returned as {'in'}. This layer accepts a single input only.

Data Types: cell

Number of outputs of the layer.

If the HasUnpoolingOutputs value equals false, then the max pooling layer has a single output with the name 'out'.

To use the output of a max pooling layer as the input to a max unpooling layer, set the HasUnpoolingOutputs value to true. In this case, the max pooling layer has two additional outputs that you can connect to a max unpooling layer:

  • 'indices' — Indices of the maximum value in each pooled region.

  • 'size' — Size of the input feature map.

To enable outputs to a max unpooling layer, the pooling regions of the max pooling layer must be nonoverlapping.

For more information on how to unpool the output of a max pooling layer, see maxUnpooling2dLayer.

Data Types: double

Output names of the layer.

If the HasUnpoolingOutputs value equals false, then the max pooling layer has a single output with the name 'out'.

To use the output of a max pooling layer as the input to a max unpooling layer, set the HasUnpoolingOutputs value to true. In this case, the max pooling layer has two additional outputs that you can connect to a max unpooling layer:

  • 'indices' — Indices of the maximum value in each pooled region.

  • 'size' — Size of the input feature map.

To enable outputs to a max unpooling layer, the pooling regions of the max pooling layer must be nonoverlapping.

For more information on how to unpool the output of a max pooling layer, see maxUnpooling2dLayer.

Data Types: cell

Examples

collapse all

Create a max pooling layer with nonoverlapping pooling regions.

layer = maxPooling2dLayer(2,'Stride',2)
layer = 
  MaxPooling2DLayer with properties:

                   Name: ''
    HasUnpoolingOutputs: 0
             NumOutputs: 1
            OutputNames: {'out'}

   Hyperparameters
               PoolSize: [2 2]
                 Stride: [2 2]
            PaddingMode: 'manual'
            PaddingSize: [0 0 0 0]

The height and the width of the rectangular regions (pool size) are both 2. The pooling regions do not overlap because the step size for traversing the images vertically and horizontally (stride) is also [2 2].

Include a max pooling layer with nonoverlapping regions in a Layer array.

layers = [ ...
    imageInputLayer([28 28 1])
    convolution2dLayer(5,20)
    reluLayer
    maxPooling2dLayer(2,'Stride',2)
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer]
layers = 
  7x1 Layer array with layers:

     1   ''   Image Input             28x28x1 images with 'zerocenter' normalization
     2   ''   2-D Convolution         20 5x5 convolutions with stride [1  1] and padding [0  0  0  0]
     3   ''   ReLU                    ReLU
     4   ''   2-D Max Pooling         2x2 max pooling with stride [2  2] and padding [0  0  0  0]
     5   ''   Fully Connected         10 fully connected layer
     6   ''   Softmax                 softmax
     7   ''   Classification Output   crossentropyex

Create a max pooling layer with overlapping pooling regions.

layer = maxPooling2dLayer([3 2],'Stride',2)
layer = 
  MaxPooling2DLayer with properties:

                   Name: ''
    HasUnpoolingOutputs: 0
             NumOutputs: 1
            OutputNames: {'out'}

   Hyperparameters
               PoolSize: [3 2]
                 Stride: [2 2]
            PaddingMode: 'manual'
            PaddingSize: [0 0 0 0]

This layer creates pooling regions of size [3 2] and takes the maximum of the six elements in each region. The pooling regions overlap because there are stride dimensions Stride that are less than the respective pooling dimensions PoolSize.

Include a max pooling layer with overlapping pooling regions in a Layer array.

layers = [ ...
    imageInputLayer([28 28 1])
    convolution2dLayer(5,20)
    reluLayer
    maxPooling2dLayer([3 2],'Stride',2)
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer]
layers = 
  7x1 Layer array with layers:

     1   ''   Image Input             28x28x1 images with 'zerocenter' normalization
     2   ''   2-D Convolution         20 5x5 convolutions with stride [1  1] and padding [0  0  0  0]
     3   ''   ReLU                    ReLU
     4   ''   2-D Max Pooling         3x2 max pooling with stride [2  2] and padding [0  0  0  0]
     5   ''   Fully Connected         10 fully connected layer
     6   ''   Softmax                 softmax
     7   ''   Classification Output   crossentropyex

Algorithms

expand all

References

[1] Nagi, J., F. Ducatelle, G. A. Di Caro, D. Ciresan, U. Meier, A. Giusti, F. Nagi, J. Schmidhuber, L. M. Gambardella. ''Max-Pooling Convolutional Neural Networks for Vision-based Hand Gesture Recognition''. IEEE International Conference on Signal and Image Processing Applications (ICSIPA2011), 2011.

Extended Capabilities

Version History

Introduced in R2016a