DML_TOP_K_OPERATOR_DESC 構造体 (directml.h)
InputTensor の軸に沿って各シーケンスから最大の K 要素を選択し、OutputValueTensor と OutputIndexTensor の要素の値とインデックスをそれぞれ返します。 シーケンスは、InputTensor の Axis ディメンションに沿って存在する要素のセットの 1 つを参照します。
構文
struct DML_TOP_K_OPERATOR_DESC {
const DML_TENSOR_DESC *InputTensor;
const DML_TENSOR_DESC *OutputValueTensor;
const DML_TENSOR_DESC *OutputIndexTensor;
UINT Axis;
UINT K;
};
メンバー
InputTensor
型: const DML_TENSOR_DESC*
選択する要素を含む入力テンソル。
OutputValueTensor
型: const DML_TENSOR_DESC*
上位 K 要素の値を書き込む出力テンソル。 このテンソルのサイズは InputTensor と同じである必要があります。ただし、Axis パラメーターで指定されたディメンションを除き、サイズは K である必要があります。
各入力シーケンスから選択された K 値は、降順 (最大から最小) で確実に並べ替えられます。
OutputIndexTensor
型: const DML_TENSOR_DESC*
上位 K 要素のインデックスを書き込む出力テンソル。 このテンソルのサイズは InputTensor と同じである必要があります。ただし、Axis パラメーターで指定されたディメンションを除き、サイズは K である必要があります。
このテンソルで返されるインデックスは、(テンソルの先頭ではなく) シーケンスの先頭を基準にして測定されます。 たとえば、インデックス 0 は、軸内のすべてのシーケンスの最初の要素を常に参照します。
top-K 内の 2 つ以上の要素の値が同じである場合 (つまり、同じ値がある場合)、両方の要素のインデックスが含まれ、昇順の要素インデックスによって順序付けされていることが保証されます。
Axis
型: UINT
要素を選択するディメンションのインデックス。 この値は、InputTensor の DimensionCount より小さくする必要があります。
K
型: UINT
選択する要素の数。 K は 0 より大きくする必要がありますが、Axis で指定されたディメンションに沿った InputTensor 内の要素の数より小さい必要があります。
例
例 1
InputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[ 0, 1, 10, 11],
[ 3, 2, 9, 8],
[ 4, 5, 6, 7]]]]
Axis: 3
K: 2
OutputValueTensor: (Sizes:{1,1,3,2}, DataType:FLOAT32)
[[[[11, 10],
[ 9, 8],
[ 7, 6]]]]
OutputIndexTensor: (Sizes:{1,1,3,2}, DataType:UINT32)
[[[[3, 2],
[2, 3],
[3, 2]]]]
例 2. 別の軸を使用する
InputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[ 0, 1, 10, 11],
[ 3, 2, 9, 8],
[ 4, 5, 6, 7]]]]
Axis: 2
K: 2
OutputValueTensor: (Sizes:{1,1,2,4}, DataType:FLOAT32)
[[[[ 4, 5, 10, 11],
[ 3, 2, 9, 8]]]]
OutputIndexTensor: (Sizes:{1,1,2,4}, DataType:UINT32)
[[[[2, 2, 0, 0],
[1, 1, 1, 1]]]]
例 3. 関連付けられた値
InputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[1, 2, 2, 3],
[3, 4, 5, 5],
[6, 6, 6, 6]]]]
Axis: 3
K: 3
OutputValueTensor: (Sizes:{1,1,3,3}, DataType:FLOAT32)
[[[[3, 2, 2],
[5, 5, 4],
[6, 6, 6]]]]
OutputIndexTensor: (Sizes:{1,1,3,3}, DataType:UINT32)
[[[[3, 1, 2],
[2, 3, 1],
[0, 1, 2]]]]
解説
この演算子の新しいバージョン (DML_TOP_K1_OPERATOR_DESC) が で DML_FEATURE_LEVEL_2_1
導入されました。
可用性
この演算子は、 で DML_FEATURE_LEVEL_2_0
導入されました。
テンソル制約
- InputTensor、 OutputIndexTensor、 および OutputValueTensor は、同じ DimensionCount を持つ必要があります。
- InputTensor と OutputValueTensor には、同じ DataType が必要です。
Tensor のサポート
DML_FEATURE_LEVEL_5_0 以降
テンソル | 種類 | サポートされているディメンション数 | サポートされるデータ型 |
---|---|---|---|
InputTensor | 入力 | 1 から 8 | FLOAT32、FLOAT16、INT64、INT32、INT16、INT8、UINT64、UINT32、UINT16、UINT8 |
OutputValueTensor | 出力 | 1 から 8 | FLOAT32、FLOAT16、INT64、INT32、INT16、INT8、UINT64、UINT32、UINT16、UINT8 |
OutputIndexTensor | 出力 | 1 から 8 | UINT64、UINT32 |
DML_FEATURE_LEVEL_3_1以上
テンソル | 種類 | サポートされているディメンション数 | サポートされるデータ型 |
---|---|---|---|
InputTensor | 入力 | 1 から 8 | FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8 |
OutputValueTensor | 出力 | 1 から 8 | FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8 |
OutputIndexTensor | 出力 | 1 から 8 | UINT32 |
DML_FEATURE_LEVEL_2_1以上
テンソル | 種類 | サポートされているディメンション数 | サポートされるデータ型 |
---|---|---|---|
InputTensor | 入力 | 4 | FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8 |
OutputValueTensor | 出力 | 4 | FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8 |
OutputIndexTensor | 出力 | 4 | UINT32 |
DML_FEATURE_LEVEL_2_0以上
テンソル | 種類 | サポートされているディメンション数 | サポートされるデータ型 |
---|---|---|---|
InputTensor | 入力 | 4 | FLOAT32、FLOAT16 |
OutputValueTensor | 出力 | 4 | FLOAT32、FLOAT16 |
OutputIndexTensor | 出力 | 4 | UINT32 |
要件
Header | directml.h |