Tile

Versioned name : Tile-1

Category : Data movement

Short description : Tile operation repeats an input tensor *”data”* the number of times given by *”repeats”* input tensor along each dimension.

  • If number of elements in *”repeats”* is more than shape of *”data”*, then *”data”* will be promoted to “*repeats*” by prepending new axes, e.g. let’s shape of *”data”* is equal to (2, 3) and *”repeats”* is equal to [2, 2, 2], then shape of *”data”* will be promoted to (1, 2, 3) and result shape will be (2, 4, 6).

  • If number of elements in *”repeats”* is less than shape of *”data”*, then *”repeats”* will be promoted to “*data*” by prepending 1’s to it, e.g. let’s shape of *”data”* is equal to (4, 2, 3) and *”repeats”* is equal to [2, 2], then *”repeats”* will be promoted to [1, 2, 2] and result shape will be (4, 4, 6)

Attributes :

No attributes available.

Inputs :

  • 1 : “data” - an input tensor to be padded. A tensor of type T1. Required.

  • 2 : “repeats” - a per-dimension replication factor. For example, repeats equal to 88 means that the output tensor gets 88 copies of data from the specified axis. A tensor of type T2. Required.

Outputs :

  • 1 : The count of dimensions in result shape will be equal to the maximum from count of dimensions in “data” shape and number of elements in “repeats”. A tensor with type matching 1st tensor.

Types

  • T1 : arbitrary supported type.

  • T2 : any integer type.

Detailed description :

Tile operation extends input tensor and filling in output tensor by the following rules:

\[out_i=input_i[inner_dim\*t]\]
\[t \in \left ( 0, \quad tiles \right )\]

Examples

Example 1: number elements in “repeats” is equal to shape of data

<layer ... type="Tile">
    <input>
        <port id="0">
            <dim>2</dim>
            <dim>3</dim>
            <dim>4</dim>
        </port>
        <port id="1">
            <dim>3</dim>  <!-- [1, 2, 3] -->
        </port>
    </input>
    <output>
        <port id="2">
            <dim>2</dim>
            <dim>6</dim>
            <dim>12</dim>
        </port>
    </output>
</layer>

Example 2: number of elements in “repeats” is more than shape of “data”

<layer ... type="Tile">
    <input>
        <port id="0">  <!-- will be promoted to shape (1, 2, 3, 4) -->
            <dim>2</dim>
            <dim>3</dim>
            <dim>4</dim>
        </port>
        <port id="1">
            <dim>4</dim>  <!-- [5, 1, 2, 3] -->
        </port>
    </input>
    <output>
        <port id="2">
            <dim>5/dim>
            <dim>2</dim>
            <dim>6</dim>
            <dim>12</dim>
        </port>
    </output>
</layer>

Example 3: number of elements in “repeats” is less than shape of “data”

<layer ... type="Tile">
    <input>
        <port id="0">
            <dim>5</dim>
            <dim>2</dim>
            <dim>3</dim>
            <dim>4</dim>
        </port>
        <port id="1">
            <dim>3</dim>  <!-- [1, 2, 3] will be promoted to [1, 1, 2, 3] -->
        </port>
    </input>
    <output>
        <port id="2">
            <dim>5</dim>
            <dim>2</dim>
            <dim>6</dim>
            <dim>12</dim>
        </port>
    </output>
</layer>