Transpose

Versioned name : Transpose-1

Category : Data movement

Short description : Transpose operation reorders the input tensor dimensions.

Detailed description : Transpose operation reorders the input tensor dimensions. Source indexes and destination indexes are bound by the formula:

\[\begin{split}output[i(order[0]), i(order[1]), ..., i(order[N-1])] = input[i(0), i(1), ..., i(N-1)]\\ \quad \textrm{where} \quad i(j) \quad\textrm{is in the range} \quad [0, (input.shape[j]-1)]\end{split}\]

Attributes : Transpose operation has no attributes.

Inputs :

  • 1 : arg - the tensor to be transposed. A tensor of type T and arbitrary shape. Required.

  • 2 : input_order - the permutation to apply to the axes of the first input shape. A 1D tensor of n elements T_AXIS type and shape [n], where n is the rank of the first input or 0. The tensor’s value must contain every integer in the range [0, n-1], but if an empty tensor is specified (shape [0]), then the axes will be inverted. Required.

Outputs :

  • 1 : A tensor of type T and transposed shape according to the rules specified above.

Types

  • T : any supported type.

  • T_AXIS : any integer type.

Examples

Example 1

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

Example 2: input_order = empty 1D tensor of Shape[0]

<layer ... type="Transpose">
    <input>
        <port id="0">
            <dim>2</dim>
            <dim>3</dim>
            <dim>4</dim>
        </port>
        <port id="1">
            <dim>0</dim> <!-- input_order is an empty 1D tensor -->
        </port>
    </input>
    <output>
        <port id="2">
            <dim>4</dim>
            <dim>3</dim>
            <dim>2</dim>
        </port>
    </output>
</layer>