다음을 통해 공유


DML_TOP_K_OPERATOR_DESC 구조체(directml.h)

InputTensor의 축을 따라 각 시퀀스에서 가장 큰 K 요소를 선택하고 각각 OutputValueTensorOutputIndexTensor에서 해당 요소의 값과 인덱스를 반환합니다. 시퀀스는InputTensor 차원을 따라 존재하는 요소 집합 중 하나를 나타냅니다.

구문

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 요소의 값을 쓸 출력 텐서입니다. 이 텐서는 크기가 K와 같아야 하는 Axis 매개 변수로 지정된 차원을 제외하고InputTensor와 같아야 합니다.

각 입력 시퀀스에서 선택한 K 값은 내림차순(가장 큰 값에서 가장 작은 값)으로 정렬되도록 보장됩니다.

OutputIndexTensor

형식: const DML_TENSOR_DESC*

상위 K 요소의 인덱스를 쓸 출력 텐서입니다. 이 텐서는 크기가 K와 같아야 하는 Axis 매개 변수로 지정된 차원을 제외하고InputTensor와 같아야 합니다.

이 텐서에서 반환된 인덱스는 텐서의 시작 부분과 달리 시퀀스의 시작을 기준으로 측정됩니다. 예를 들어 인덱스 0은 항상 축의 모든 시퀀스에 대한 첫 번째 요소를 참조합니다.

top-K의 두 개 이상의 요소가 같은 값(즉, 동률인 경우)이 있는 경우 두 요소의 인덱스가 포함되며 오름차순 요소 인덱스로 정렬되도록 보장됩니다.

Axis

형식: UINT

요소를 선택할 차원의 인덱스입니다. 이 값은 InputTensorDimensionCount보다 작아야 합니다.

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_DESCDML_FEATURE_LEVEL_2_1도입되었습니다.

가용성

이 연산자는 에서 DML_FEATURE_LEVEL_2_0도입되었습니다.

텐서 제약 조건

  • InputTensor, OutputIndexTensorOutputValueTensor 에는 동일한 DimensionCount가 있어야 합니다.
  • InputTensorOutputValueTensor 에는 동일한 DataType이 있어야 합니다.

텐서 지원

DML_FEATURE_LEVEL_5_0 이상

텐서 Kind 지원되는 차원 수 지원되는 데이터 형식
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 이상

텐서 Kind 지원되는 차원 수 지원되는 데이터 형식
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 이상

텐서 Kind 지원되는 차원 수 지원되는 데이터 형식
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 이상

텐서 Kind 지원되는 차원 수 지원되는 데이터 형식
InputTensor 입력 4 FLOAT32, FLOAT16
OutputValueTensor 출력 4 FLOAT32, FLOAT16
OutputIndexTensor 출력 4 Uint32

요구 사항

   
머리글 directml.h