# helia_edge.models.metaformer

## MetaFormer: Meta-Learning with Transformers

### Overview

MetaFormer is a transformer-based model that incorporates both spatial mixing and channel mixing blocks.
The architecture is designed to learn from few examples and generalize to new tasks.

For more info, refer to the original paper [MetaFormer: Meta-Learning with Transformers](https://arxiv.org/abs/2110.11605).

Parameters are in ``helia_edge.models.metaformer_params``.

**Functions**

| Name | Description |
| --- | --- |
| `build` | MetaFormer model from ``MetaFormerParams`` |
| `patch_embedding` | Patch embedding layer |
| `pool_token_mixer` | Token mixer using average pooling |
| `conv_token_mixer` | Token mixer using separable convolution |
| `attention_token_mixer` | Token mixer using multi-head attention |
| `mlp_channel_mixer` | Channel mixer using MLP via 1x1 convolutions |
| `metaformer_block` | Metaformer block |
| `metaformer_layer` | Metaformer functional layer |

## helia_edge.models.metaformer.patch_embedding

`function` · `python`

```python
patch_embedding(
    embed_dim: int,
    patch_shape: tuple[int, int],
    stride_shape: tuple[int, int] | None = None,
    padding: str = 'same',
) -> keras.layers.Layer
```

Patch embedding layer using 2D convolution

**Parameters**

| Name | Type | Default | Description |
| --- | --- | --- | --- |
| embed_dim | int | Required | Embedding dimension |
| patch_shape | tuple[int, int] | Required | Patch shape |
| stride_shape | tuple[int, int] | None | Stride shape. Defaults to None. |
| padding | str | 'same' | Padding. Defaults to 'same'. |

Source: `helia_edge/models/metaformer.py:30`

## helia_edge.models.metaformer.pool_token_mixer

`function` · `python`

```python
pool_token_mixer(pool_size: tuple[int, int] = (2, 2)) -> keras.layers.Layer
```

Token mixer using average pooling

**Parameters**

| Name | Type | Default | Description |
| --- | --- | --- | --- |
| pool_size | tuple[int, int] | (2, 2) | Pool size. Defaults to (2, 2). |

**Returns**

| Name | Type | Description |
| --- | --- | --- |
|  | keras.layers.Layer | keras.layers.Layer: Token mixer layer |

Source: `helia_edge/models/metaformer.py:56`

## helia_edge.models.metaformer.conv_token_mixer

`function` · `python`

```python
conv_token_mixer(
    embed_dim: int,
    kernel_size: tuple[int, int] = (3, 3),
    strides: tuple[int, int] = (1, 1),
) -> keras.Layer
```

Token mixer using separable convolution

**Parameters**

| Name | Type | Default | Description |
| --- | --- | --- | --- |
| embed_dim | int | Required | Embedding dimension |
| kernel_size | tuple[int, int] | (3, 3) | Kernel size. Defaults to (3, 3). |
| strides | tuple[int, int] | (1, 1) | Strides. Defaults to (1, 1). |

**Returns**

| Name | Type | Description |
| --- | --- | --- |
|  | keras.Layer | keras.layers.Layer: Token mixer layer |

Source: `helia_edge/models/metaformer.py:84`

## helia_edge.models.metaformer.attention_token_mixer

`function` · `python`

```python
attention_token_mixer(embed_dim: int, num_heads: int, dropout: float = 0.1) -> keras.layers.Layer
```

Token mixer using multi-head attention

**Parameters**

| Name | Type | Default | Description |
| --- | --- | --- | --- |
| embed_dim | int | Required | Embedding dimension |
| num_heads | int | Required | Number of heads |
| dropout | float | 0.1 | Dropout rate. Defaults to 0.1. |

**Returns**

| Name | Type | Description |
| --- | --- | --- |
|  | keras.layers.Layer | keras.layers.Layer: Token mixer layer |

Source: `helia_edge/models/metaformer.py:115`

## helia_edge.models.metaformer.mlp_channel_mixer

`function` · `python`

```python
mlp_channel_mixer(embed_dim: int, ratio: int = 4, activation: str = 'gelu', dropout: float = 0) -> keras.Layer
```

Channel mixer using MLP via 1x1 convolutions

**Parameters**

| Name | Type | Default | Description |
| --- | --- | --- | --- |
| embed_dim | int | Required | Embedding dimension |
| ratio | int | 4 | Expansion ratio. Defaults to 4. |
| activation | str | 'gelu' | Activation function. Defaults to "gelu". |
| dropout | float | 0 | Dropout rate. Defaults to 0. |

**Returns**

| Name | Type | Description |
| --- | --- | --- |
|  | keras.Layer | keras.layers.Layer: Channel mixer layer |

Source: `helia_edge/models/metaformer.py:151`

## helia_edge.models.metaformer.metaformer_block

`function` · `python`

```python
metaformer_block(
    token_mixer: keras.layers.Layer | None = None,
    channel_mixer: keras.layers.Layer | None = None,
    name: str = 'mf_block',
) -> keras.layers.Layer
```

Metaformer block

**Parameters**

| Name | Type | Default | Description |
| --- | --- | --- | --- |
| token_mixer | keras.layers.Layer | None | Token mixer layer. Defaults to None. |
| channel_mixer | keras.layers.Layer | None | Channel mixer layer. Defaults to None. |
| name | str | 'mf_block' | Block name. Defaults to 'mf_block'. |

**Returns**

| Name | Type | Description |
| --- | --- | --- |
|  | keras.layers.Layer | keras.layers.Layer: Metaformer block |

Source: `helia_edge/models/metaformer.py:194`

## helia_edge.models.metaformer.metaformer_layer

`function` · `python`

```python
metaformer_layer(x: keras.KerasTensor, params: MetaFormerParams) -> keras.KerasTensor
```

MetaFormer functional layer

**Parameters**

| Name | Type | Default | Description |
| --- | --- | --- | --- |
| x | keras.KerasTensor | Required | Input tensor |
| params | MetaFormerParams | Required | Model parameters. |

**Returns**

| Name | Type | Description |
| --- | --- | --- |
|  | keras.KerasTensor | keras.KerasTensor: Output tensor |

Source: `helia_edge/models/metaformer.py:242`

## helia_edge.models.metaformer.build

`function` · `python`

```python
build(
    params: MetaFormerParams,
    input_shape: tuple[int | None, ...],
    *,
    batch_size: int | None = None,
    name: str | None = None,
) -> keras.Model
```

Build a MetaFormer model.

**Parameters**

| Name | Type | Default | Description |
| --- | --- | --- | --- |
| params | MetaFormerParams | Required | Model parameters. |
| input_shape | tuple[int \| None, ...] | Required | Input shape without the batch axis; None for a variable axis. |
| batch_size | int \| None | None | Static batch size; None for a dynamic batch. |
| name | str \| None | None | Model name; the family when None. |

**Returns**

| Name | Type | Description |
| --- | --- | --- |
|  | keras.Model | keras.Model: The model, named ``metaformer`` unless ``name`` is given. |

Source: `helia_edge/models/metaformer.py:412`
