다음을 통해 공유


DML_TOP_K1_OPERATOR_DESC 구조체(directml.h)

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

가장 큰 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같아야 합니다.

각 입력 시퀀스에서 선택한 K 값은 AxisDirectionDML_AXIS_DIRECTION_DECREASING경우 내림차순(가장 큰 값에서 가장 작은 값)으로 정렬되도록 보장됩니다. 그렇지 않으면 반대의 경우도 마찬가지이며 선택한 값은 오름차순(가장 작은 값에서 가장 큰 값)으로 정렬되도록 보장됩니다.

OutputIndexTensor

형식: const DML_TENSOR_DESC*

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

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

상위 K의 두 개 이상의 요소가 동일한 값(즉, 동률일 때)을 갖는 경우 두 요소의 인덱스가 포함되며 오름차순 요소 인덱스로 정렬되도록 보장됩니다. 이는 AxisDirection값과 관계없이 true입니다.

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 제약 조건

  • InputTensor, OutputIndexTensorOutputValueTensor 동일한 DimensionCount있어야 합니다.
  • InputTensorOutputValueTensor 동일한 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