DML_TOP_K_OPERATOR_DESC 구조체(directml.h)
InputTensor의 축을 따라 각 시퀀스에서 가장 큰 K 요소를 선택하고 각각 OutputValueTensor 및 OutputIndexTensor에서 해당 요소의 값과 인덱스를 반환합니다. 시퀀스는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
요소를 선택할 차원의 인덱스입니다. 이 값은 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이 있어야 합니다.
텐서 지원
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 |