| AIfES 2 2.0.0

Data Fields
ailayer_maxpool2d Struct Reference

General layer structure. More...

`#include <ailayer_maxpool2d.h>`

## Data Fields
ailayer_t | base
| Inherited field members from general ailayer struct.
uint16_t | result_shape [4]
| The shape of the result.
Layer configuration
Required configuration parameters for the layer These fields have to be configured by the user before calling the initializer function.
uint16_t | pool_size [2]
| Size of the pooling kernel ( \( [H_{pool}, W_{pool}] \)).
uint16_t | stride [2]
| The stride in the direction of height and width ( \( [S_{h}, S_{w}] \)).
uint16_t | padding [2]
| The (symmetric) minus infinity padding in the direction of height and width ( \( [P_{h}, P_{w}], \; 0 \leq P_h < H_{pool}, 0 \leq P_w < W_{pool} \)).
int8_t | channel_axis
| Index of the channel axis (1 for channels first and -1 or 3 for channels last).
Training parameters
Data fields required for the training of the layer
uint32_t * | max_locations
| Pointer to memory section where the indices of the maximum values per pooling window are stored.
void * | optimem [2]
| Memory field used by the optimizer for training.
Math functions
Required data type specific math functions
void(* | maxpool2d_fwd )(const aitensor_t *input, const uint16_t pool_size[2], const uint16_t stride[2], const uint16_t padding[2], int8_t channel_axis, void *work_space, uint32_t *max_locations, aitensor_t *output)
| Required math function: 2D Max-Pooling. More...
void(* | maxpool2d_bwd )(const aitensor_t *delta_out, const uint16_t pool_size[2], const uint16_t stride[2], const uint16_t padding[2], int8_t channel_axis, void *work_space, const uint32_t *max_locations, aitensor_t *delta_in)
| Required math function: Gradients of 2D Max-Pooling with respect to the input. More...

## Detailed Description

General layer structure.

## Field Documentation

## ◆ maxpool2d_bwd

void(* maxpool2d_bwd) (const aitensor_t *delta_out, const uint16_t pool_size[2], const uint16_t stride[2], const uint16_t padding[2], int8_t channel_axis, void *work_space, const uint32_t *max_locations, aitensor_t *delta_in)

Required math function: Gradients of 2D Max-Pooling with respect to the input.

Requires a math function that calculates the gradients with respect to the input \( delta_{in} = \mathrm{d} L / \mathrm{d} x_{in} \).

This is done by simply copying the output gradient to the position in the input gradients depicted by max_locations.
An element of max_locations consist of the concatenated 16-bit indices for height and width in the pooling window.

Parameters

  delta_out | Gradients backpropagated from the following layer with dimension \( [N,C,H_{out},W_{out}] \) (channels first) or \( [N,H_{out},W_{out},C] \) (channels last)
  pool_size | The size of the pooling window (height and width)
  stride | The stride in the direction of height and width.
  padding | The (symmetric) minus infinity padding in the direction of height and width
  channel_axis | Index of the channel axis (1 for channels first and -1 or 3 for channels last).
  workspace | Pointer to a work space buffer for intermediate results.
  max_locations | Pointer to memory section where the indices of the maximum values per pooling window are stored.
  delta_in | Resulting input gradients for backpropagation to the previous layer \( [N,C,H_{in},W_{in}] \) (channels first) or \( [N,H_{in},W_{in},C] \) (channels last)

## ◆ maxpool2d_fwd

void(* maxpool2d_fwd) (const aitensor_t *input, const uint16_t pool_size[2], const uint16_t stride[2], const uint16_t padding[2], int8_t channel_axis, void *work_space, uint32_t *max_locations, aitensor_t *output)

Required math function: 2D Max-Pooling.

Requires a math function that extracts the maximum from a kernel window.

For training (max_locations != 0), the index of the max-value in the kernel window must be stored in max_locations.
An element of max_locations simply consist of the concatenated 16-bit indices for height and width in the pooling window.

Parameters

  input | Input data with dimension \( [N,C,H_{in},W_{in}] \) (channels first) or \( [N,H_{in},W_{in},C] \) (channels last)
  pool_size | The size of the pooling window (height and width)
  stride | The stride in the direction of height and width.
  padding | The (symmetric) minus infinity padding in the direction of height and width
  channel_axis | Index of the channel axis (1 for channels first and -1 or 3 for channels last).
  workspace | Pointer to a work space buffer for intermediate results.
  max_locations | Pointer to memory section where the indices of the maximum values per pooling window are stored.
  output | Output after max-pooling with dimension \( [N,C,H_{out},W_{out}] \) (channels first) or \( [N,H_{out},W_{out},C] \) (channels last)

The documentation for this struct was generated from the following file:

- ailayer_maxpool2d.h