<br />

|---|
| [![](https://www.tensorflow.org/images/GitHub-Mark-32px.png) View source on GitHub](https://github.com/keras-team/keras/tree/v3.15.1/keras/src/layers/pooling/global_average_pooling2d.py#L6-L68) |

Global average pooling operation for 2D data.

Inherits From: [`Layer`](https://www.tensorflow.org/api_docs/python/tf/keras/Layer), [`Operation`](https://www.tensorflow.org/api_docs/python/tf/keras/Operation)

#### View aliases


**Main aliases**

[`tf.keras.layers.GlobalAvgPool2D`](https://www.tensorflow.org/api_docs/python/tf/keras/layers/GlobalAveragePooling2D)

<br />

    tf.keras.layers.GlobalAveragePooling2D(
        data_format=None, keepdims=False, **kwargs
    )

### Used in the notebooks

| Used in the guide | Used in the tutorials |
|---|---|
| - [Estimators](https://www.tensorflow.org/guide/estimator) - [Pruning for on-device inference w/ XNNPACK](https://www.tensorflow.org/model_optimization/guide/pruning/pruning_for_on_device_inference) | - [Transfer learning and fine-tuning](https://www.tensorflow.org/tutorials/images/transfer_learning) - [TFF simulations with accelerators](https://www.tensorflow.org/federated/tutorials/simulations_with_accelerators) |

<br />

<br />

<br />

| ## Args ||
|---|---|
| `data_format` | string, either `"channels_last"` or `"channels_first"`. The ordering of the dimensions in the inputs. `"channels_last"` corresponds to inputs with shape `(batch, height, width, channels)` while `"channels_first"` corresponds to inputs with shape `(batch, features, height, weight)`. It defaults to the `image_data_format` value found in your Keras config file at `~/.keras/keras.json`. If you never set it, then it will be `"channels_last"`. |
| `keepdims` | A boolean, whether to keep the temporal dimension or not. If `keepdims` is `False` (default), the rank of the tensor is reduced for spatial dimensions. If `keepdims` is `True`, the spatial dimension are retained with length 1. The behavior is the same as for [`tf.reduce_mean`](https://www.tensorflow.org/api_docs/python/tf/math/reduce_mean) or `np.mean`. |

<br />

#### Input shape:

- If `data_format='channels_last'`: 4D tensor with shape: `(batch_size, height, width, channels)`
- If `data_format='channels_first'`: 4D tensor with shape: `(batch_size, channels, height, width)`

#### Output shape:

- If `keepdims=False`: 2D tensor with shape `(batch_size, channels)`.
- If `keepdims=True`:
  - If `data_format="channels_last"`: 4D tensor with shape `(batch_size, 1, 1, channels)`
  - If `data_format="channels_first"`: 4D tensor with shape `(batch_size, channels, 1, 1)`

#### Example:

    x = np.random.rand(2, 4, 5, 3)
    y = keras.layers.GlobalAveragePooling2D()(x)
    y.shape
    (2, 3)

<br />

<br />

<br />

| ## Attributes ||
|---|---|
| `input` | Retrieves the input tensor(s) of a symbolic operation. <br /> Only returns the tensor(s) corresponding to the *first time* the operation was called. |
| `output` | Retrieves the output tensor(s) of a layer. <br /> Only returns the tensor(s) corresponding to the *first time* the operation was called. |

<br />

## Methods

### `from_config`

[View source](https://github.com/keras-team/keras/tree/v3.15.1/keras/src/ops/operation.py#L322-L362)

    @classmethod
    from_config(
        config
    )

Creates an operation from its config.

This method is the reverse of `get_config`, capable of instantiating the
same operation from the config dictionary.

> [!NOTE]
> **Note:** If you override this method, you might receive a serialized dtype config, which is a `dict`. You can deserialize it as follows:

    if "dtype" in config and isinstance(config["dtype"], dict):
        policy = dtype_policies.deserialize(config["dtype"])

<br />

<br />

<br />

| Args ||
|---|---|
| `config` | A Python dictionary, typically the output of `get_config`. |

<br />

<br />

<br />

<br />

| Returns ||
|---|---|
| An operation instance. ||

<br />