DML_TOP_K1_OPERATOR_DESC構造体 (directml.h)
最大の K 要素を選択するか、最小の K 要素を選択するかの選択は、AxisDirectionを使用して制御できます。
構文
struct DML_TOP_K1_OPERATOR_DESC {
const DML_TENSOR_DESC *InputTensor;
const DML_TENSOR_DESC *OutputValueTensor;
const DML_TENSOR_DESC *OutputIndexTensor;
UINT Axis;
UINT K;
DML_AXIS_DIRECTION AxisDirection;
};
メンバーズ
InputTensor
型: const DML_TENSOR_DESC*
選択する要素を含む入力テンソル。
OutputValueTensor
型: const DML_TENSOR_DESC*
上位の K 要素の値を書き込む出力テンソル。 上部
AxisDirection が
OutputIndexTensor
型: const DML_TENSOR_DESC*
上位の K 要素のインデックスを書き込む出力テンソル。 このテンソルには、の InputTensorと等しいサイズが必要です。、Axis パラメーターで指定されたディメンションの を除き、Kと等しいサイズにする必要があります。
このテンソルで返されるインデックスは、(テンソルの始まりではなく) シーケンスの先頭を基準にして測定されます。 たとえば、インデックス 0 は、軸内のすべてのシーケンスの最初の要素を常に参照します。
top-K 内の 2 つ以上の要素が同じ値を持つ場合 (つまり、同じ値がある場合)、両方の要素のインデックスが含まれ、昇順の要素インデックスによって順序付けされていることが保証されます。 これは、AxisDirectionの値に関係なく当てはまります。
Axis
型: UINT
要素を選択するディメンションのインデックス。 この値は、InputTensorの DimensionCount より小さくする必要があります。
K
型: UINT
選択する要素の数。 K は 0 より大きくする必要がありますが、InputTensor 内の要素の数より小さい値 軸で指定されたディメンションに沿って指定します。
AxisDirection
DML_AXIS_DIRECTION 列挙体の値。 DML_AXIS_DIRECTION_INCREASINGに設定すると、この演算子は値を大きくするために、最小K 要素を返します。 それ以外の場合は、最大 K 要素を減少順に返します。
例
例 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
AxisDirection: DML_AXIS_DIRECTION_DECREASING
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
AxisDirection: DML_AXIS_DIRECTION_DECREASING
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
AxisDirection: DML_AXIS_DIRECTION_DECREASING
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]]]]
例 4. 軸方向の拡大
InputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[1, 2, 2, 3],
[3, 4, 5, 5],
[6, 6, 6, 6]]]]
Axis: 3
K: 3
AxisDirection: DML_AXIS_DIRECTION_INCREASING
OutputValueTensor: (Sizes:{1,1,3,3}, DataType:FLOAT32)
[[[[1, 2, 2],
[3, 4, 5],
[6, 6, 6]]]]
OutputIndexTensor: (Sizes:{1,1,3,3}, DataType:UINT32)
[[[[0, 1, 2],
[0, 1, 2],
[0, 1, 2]]]]
備考
AxisDirection が DML_AXIS_DIRECTION_DECREASINGに設定されている場合、この演算子は DML_TOP_K_OPERATOR_DESCと同じです。
可用性
この演算子は、DML_FEATURE_LEVEL_2_1
で導入されました。
Tensor 制約
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 |
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 10 ビルド 20348 |
サポートされる最小サーバー | Windows 10 ビルド 20348 |
ヘッダー | directml.h |