次の方法で共有


DML_TOP_K1_OPERATOR_DESC構造体 (directml.h)

InputTensorの軸に沿って各シーケンスから最大または最小の K 要素を選択し、OutputValueTensor および OutputIndexTensor内のこれらの要素の値とインデックス 返します。 シーケンス は、InputTensorAxis ディメンションに沿って存在する要素のセットの 1 つを指します。

最大の 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 要素の値を書き込む出力テンソル。 上部 K 要素は、AxisDirectionの値に応じて、最も大きい要素か最小値かに基づいて選択 。 このテンソルには、の InputTensorと等しいサイズが必要です。Axis パラメーターで指定されたディメンションの を除き、Kと等しいサイズにする必要があります。

AxisDirection が DML_AXIS_DIRECTION_DECREASINGされている場合、各入力シーケンスから選択された K 値は降順 (最大から最小) で並べ替えられます。 それ以外の場合、その逆が true になり、選択した値は昇順 (最小から最大) で並べ替えられます。

OutputIndexTensor

型: const DML_TENSOR_DESC*

上位の K 要素のインデックスを書き込む出力テンソル。 このテンソルには、の InputTensorと等しいサイズが必要です。Axis パラメーターで指定されたディメンションの を除き、Kと等しいサイズにする必要があります。

このテンソルで返されるインデックスは、(テンソルの始まりではなく) シーケンスの先頭を基準にして測定されます。 たとえば、インデックス 0 は、軸内のすべてのシーケンスの最初の要素を常に参照します。

top-K 内の 2 つ以上の要素が同じ値を持つ場合 (つまり、同じ値がある場合)、両方の要素のインデックスが含まれ、昇順の要素インデックスによって順序付けされていることが保証されます。 これは、AxisDirectionの値に関係なく当てはまります。

Axis

型: UINT

要素を選択するディメンションのインデックス。 この値は、InputTensorDimensionCount より小さくする必要があります。

K

型: UINT

選択する要素の数。 K は 0 より大きくする必要がありますが、InputTensor 内の要素の数より小さい値 で指定されたディメンションに沿って指定します。

AxisDirection

型: DML_AXIS_DIRECTION

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]]]]

備考

AxisDirectionDML_AXIS_DIRECTION_DECREASINGに設定されている場合、この演算子は DML_TOP_K_OPERATOR_DESCと同じです。

可用性

この演算子は、DML_FEATURE_LEVEL_2_1で導入されました。

Tensor 制約

  • InputTensorOutputIndexTensor、および 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