Main Content

globalAveragePooling2dLayer

2-D global average pooling layer

Since R2019b

Description

A 2-D global average pooling layer performs downsampling by computing the mean of the height and width dimensions of the input.

The dimensions that the layer pools over depends on the layer input:

  • For 2-D image input (data with four dimensions corresponding to pixels in two spatial dimensions, the channels, and the observations), the layer pools over the spatial dimensions.

  • For 2-D image sequence input (data with five dimensions corresponding to the pixels in two spatial dimensions, the channels, the observations, and the time steps), the layer pools over the spatial dimensions.

  • For 1-D image sequence input (data with four dimensions corresponding to the pixels in one spatial dimension, the channels, the observations, and the time steps), the layer pools over the spatial and time dimensions.

Creation

Description

layer = globalAveragePooling2dLayer creates a global average pooling layer.

example

layer = globalAveragePooling2dLayer('Name',name) sets the optional Name property.

Properties

expand all

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 GlobalAveragePooling2DLayer 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

This property is read-only.

Number of outputs from the layer, returned as 1. This layer has a single output only.

Data Types: double

This property is read-only.

Output names, returned as {'out'}. This layer has a single output only.

Data Types: cell

Examples

collapse all

Create a global average pooling layer with the name 'gap1'.

layer = globalAveragePooling2dLayer('Name','gap1')
layer = 
  GlobalAveragePooling2DLayer with properties:

    Name: 'gap1'

Include a global average pooling layer in a Layer array.

layers = [ ...
    imageInputLayer([28 28 1])
    convolution2dLayer(5,20)
    reluLayer
    globalAveragePooling2dLayer
    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 Global Average Pooling   2-D global average pooling
     5   ''   Fully Connected              10 fully connected layer
     6   ''   Softmax                      softmax
     7   ''   Classification Output        crossentropyex

Tips

  • In an image classification network, you can use a globalAveragePooling2dLayer before the final fully connected layer to reduce the size of the activations without sacrificing performance. The reduced size of the activations means that the downstream fully connected layers will have fewer weights, reducing the size of your network.

  • You can use a globalAveragePooling2dLayer towards the end of a classification network instead of a fullyConnectedLayer. Since global pooling layers have no learnable parameters, they can be less prone to overfitting and can reduce the size of the network. These networks can also be more robust to spatial translations of input data. You can also replace a fully connected layer with a globalMaxPooling2dLayer instead. Whether a globalMaxPooling2dLayer or a globalAveragePooling2dLayer is more appropriate depends on your data set.

    To use a global average pooling layer instead of a fully connected layer, the number of channels in the input of the global average pooling layer must match the number of classes in the classification task.

Algorithms

expand all

Extended Capabilities

C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.

GPU Code Generation
Generate CUDA® code for NVIDIA® GPUs using GPU Coder™.

Version History

Introduced in R2019b