TopK

バージョン名: TopK-1

カテゴリー: ソートと最大化

簡単な説明: TopK は、指定された軸に沿った各スライスの k 個の最大/最小値のインデックスと値を計算します。

属性:

  • axis

    • 説明: 値を取得する軸を指定します。

    • 値の範囲: 整数。負の値は、次元を端から数えることを意味します。

    • タイプ: int

    • 必須: はい

  • mode

    • 説明: 2 つの要素から最大の要素を選択するために、どの操作を使用するかを指定します。

    • 値の範囲: minmax

    • タイプ: string

    • 必須: はい

  • sort

    • 説明: 出力要素やインデックスの順序を指定します。

    • 値の範囲: valueindexnone

    • タイプ: string

    • 必須: はい

  • index_element_type

    • 説明: インデックス付きの出力テンソルのタイプ

    • 値の範囲: “i64” または “i32”

    • タイプ: 文字列

    • デフォルト値: “i32”

    • 必須: いいえ

入力:

  • 1: 任意のテンソル。必須。

  • 2: k – スカラーは、計算される最大/最小要素の数を指定します。

出力:

  • 1: 指定された次元に沿った入力テンソルからの上位 k 値を含む出力テンソル。テンソルの形状は、[input1.shape[0], ..., input1.shape[axis-1], k, input1.shape[axis+1], ...] です。

  • 2: 次元に沿った各スライスの上位 k インデックスを持つ出力テンソル。これは形状 [k] の 1D テンソルです。テンソルの形状は 1 番目の出力、つまり次と同一です: [input1.shape[0], ..., input1.shape[axis-1], k, input1.shape[axis+1], ...]

詳細説明:

出力テンソルには、次の方法で計算された値が入力されます。

output[i1, ..., i(axis-1), j, i(axis+1) ..., iN] = top_k(input[i1, ...., i(axis-1), :, i(axis+1), ..., iN]), k, sort, mode)

したがって、1D 配列を表す各スライス input[i1, ...., i(axis-1), :, i(axis+1), ..., iN] に対して、top_k 値が個別に計算されます。

並べ替えと最小値/最大値は、sortmode 属性によって制御されます。

  • mode = maxsort = value - 値による降順

  • mode = maxsort = index - インデックスによる昇順

  • mode = maxsort = none - 未定義

  • mode = minsort = value - 値による降順

  • mode = minsort = index - インデックスによる昇順

  • mode = minsort = none - 未定義

同じ値を持つ要素が複数ある場合、それらの出力順序は決定されません。

例:

<layer ... type="TopK" ... >
    <data axis="1" mode="max" sort="value"/>
    <input>
        <port id="0">
            <dim>6</dim>
            <dim>12</dim>
            <dim>10</dim>
            <dim>24</dim>
        </port>
        <port id="1">
            <!-- k = 3 -->
        </port>
    <output>
        <port id="2">
            <dim>6</dim>
            <dim>3</dim>
            <dim>10</dim>
            <dim>24</dim>
        </port>
    </output>
</layer>