TopK¶
バージョン名: TopK-11
カテゴリー: ソートと最大化
簡単な説明: TopK は、指定された軸に沿った各スライスの k 個の最大/最小値のインデックスと値を計算します。
属性:
-
axis
説明: 値を取得する軸を指定します。
値の範囲: 整数。負の値は、次元を後ろから数えることを意味します。
タイプ:
int
必須: はい
-
mode
説明: TopK が各スライスから最大の要素を選択するか最小の要素を選択するかを指定します。
値の範囲: “min”、“max”
タイプ:
string
必須: はい
-
sort
説明: 出力テンソルの対応する要素の順序を指定します。
値の範囲:
value
、index
、none
タイプ:
string
必須: はい
-
stable
説明: 同等の要素が入力テンソルからの相対的な順序を維持するかどうかを指定します。
sort
属性がvalue
またはindex
に設定されている場合にのみ有効です。値の範囲: true または false
タイプ:
boolean
デフォルト値 : false
必須: いいえ
-
index_element_type
説明: インデックス付きの出力テンソルのタイプ
値の範囲: “i64” または “i32”
タイプ: 文字列
デフォルト値: “i32”
必須: いいえ
入力:
1: 任意のランクとタイプ T のテンソル。必須。
2: K の値 - 入力テンソルから選択する要素の数を指定する任意の整数タイプのスカラー。K の値の許容範囲は
<1;input1.shape[axis]>
です。K の値がこれらの要件を満たさない場合、このオペレーターの動作は未定義です。必須。
出力:
1: 指定された軸に沿った入力テンソルからの k 値を持つタイプ T の出力テンソル。テンソルの形状は、
[input1.shape[0], ..., input1.shape[axis-1], 1..k, input1.shape[axis+1], ..., input1.shape[input1.rank - 1]]
です。2: 最初の出力テンソルからの対応する要素 (値) のインデックスを含む出力テンソル。インデックスは、元の入力テンソル内の選択された値の位置を指します。この出力テンソルの形状は、最初の出力の形状と同じです。つまり、
[input1.shape[0], ..., input1.shape[axis-1], 1..k, input1.shape[axis+1], ..., input1.shape[input1.rank - 1]]
です。このテンソル T_IND のタイプは、index_element_type
属性によって制御されます。
タイプ:
T: 任意の数値タイプ。
T_IND:
int64
またはint32
。
詳細説明:
出力テンソルには、次の方法で計算された値が入力されます。
output[i1, ..., i(axis-1), j, i(axis+1) ..., iN] = top_k(input[i1, ...., i(axis-1), :, i(axis+1), ..., iN]), k, sort, mode)
スライス input[i1, ...., i(axis-1), :, i(axis+1), ..., iN]
ごとに、TopK 値が個別に計算されます。
並べ替えと最小/最大は、stable
によって提供される追加の構成機能を備えた sort
属性と mode
属性によって制御されます。
sort =
value
、mode =max
, stable =false
- 値による降順、等しい要素の相対順序が維持されることは保証されませんsort =
value
、mode =max
, stable =true
- 値による降順、等しい要素の相対順序が維持されることは保証されますsort =
value
、mode =min
, stable =false
- 値による昇順、等しい要素の相対順序が維持されることは保証されませんsort =
value
、mode =min
, stable =true
- 値による昇順、等しい要素の相対順序が維持されることは保証されますsort =
index
、mode =max
, stable =false
- インデックスによる昇順、等しい要素の相対順序が維持されることは保証されませんsort =
index
、mode =max
, stable =true
- インデックスによる昇順、等しい要素の相対順序が維持されることは保証されますsort =
index
、mode =min
, stable =false
- インデックスによる昇順、等しい要素の相対順序が維持されることは保証されませんsort =
index
、mode =min
, stable =true
- インデックスによる昇順、等しい要素の相対順序が維持されることは保証されますsort =
none
、mode =max
- 未定義sort =
none
、mode =min
- 未定義
同等の要素の相対的な順序は、stable
属性が true
に設定されている場合にのみ保持されます。これにより、実装では TopK 要素の計算中に安定したソート・アルゴリズムが使用されます。それ以外は出力順序は未定義です。“インデックスによる” 順序は、入力テンソルの要素は値によってソートされますが、出力テンソル内の要素の順序は入力テンソル内の要素のインデックスによって決定されることを意味します。ただし、これにより複数の正しい結果が得られる可能性があります。例えば、入力テンソルに次の要素が含まれているとします。
input = [5, 3, 1, 2, 5, 5]
および TopK が次のように設定されている場合:
mode = min
sort = index
k = 4
その場合、次の 3 つの結果は正しくなります。
output_values = [5, 3, 1, 2]
output_indices = [0, 1, 2, 3]
output_values = [3, 1, 2, 5]
output_indices = [1, 2, 3, 4]
output_values = [3, 1, 2, 5]
output_indices = [1, 2, 3, 5]
さらに、stable
属性が true に設定されている場合、上記の例の正しい解決策は 1 つだけです。
output_values = [5, 3, 1, 2]
output_indices = [0, 1, 2, 3]
特定の TopK ノードに対して sort == index
を指定すると、インデックスは常に昇順にソートされます。sort == index
および mode == max
を設定すると、値は最初に降順で並べ替えられますが、出力要素の順序に影響するインデックスは昇順で並べ替えられます。
例:
この例では、K
が 10 に等しいと想定します。
<layer ... type="TopK" ... >
<data axis="3" mode="max" sort="value" stable="true" index_element_type="i64"/>
<input>
<port id="0">
<dim>1</dim>
<dim>3</dim>
<dim>224</dim>
<dim>224</dim>
</port>
<port id="1">
</port>
<output>
<port id="2">
<dim>1</dim>
<dim>3</dim>
<dim>224</dim>
<dim>10</dim>
</port>
<port id="3">
<dim>1</dim>
<dim>3</dim>
<dim>224</dim>
<dim>10</dim>
</port>
</output>
</layer>