DML_JOIN_OPERATOR_DESC 구조체(directml.h)
지정된 축을 따라 입력 텐서 배열을 연결합니다.
입력 텐서의 크기가 0이 아닌 크기를 포함할 수 있는 조인 축을 제외한 모든 차원에서 동일한 경우에만 조인할 수 있습니다. 출력 크기는 조인 축을 제외한 입력 크기와 같으며, 이는 모든 입력의 조인 축 크기의 합계입니다. 이러한 제약 조건은 아래 의사 코드에 설명되어 있습니다.
joinSize = 0;
for (i = 0; i < InputCount; i++) {
assert(inputTensors[i]->DimensionCount == outputTensor->DimensionCount);
for (dim = 0; dim < outputTensor->DimensionCount; dim++) {
if (dim == Axis) { joinSize += inputTensors[i]->Sizes[dim]; }
else { assert(inputTensors[i]->Sizes[dim] == outputTensor->Sizes[dim]); }
}
}
assert(joinSize == outputTensor->Sizes[Axis]);
단일 입력 텐서를 조인하면 입력 텐서의 복사본이 생성됩니다.
이 연산자는 DML_SPLIT_OPERATOR_DESC 역입니다.
구문
struct DML_JOIN_OPERATOR_DESC {
UINT InputCount;
const DML_TENSOR_DESC *InputTensors;
const DML_TENSOR_DESC *OutputTensor;
UINT Axis;
};
멤버
InputCount
형식: UINT
이 필드는 InputTensors 배열의 크기를 결정합니다. 이 값은 0보다 커야 합니다.
InputTensors
형식: _Field_size_(InputCount) const DML_TENSOR_DESC*
단일 출력 텐서에 조인할 텐서에 대한 설명을 포함하는 배열입니다. 이 배열의 모든 입력 텐서는 조인 축을 제외하고 크기가 0이 아니어야 합니다.
OutputTensor
형식: const DML_TENSOR_DESC*
조인된 입력 텐서를 쓸 텐서입니다. 출력 크기는 조인 축을 제외한 모든 입력 텐서와 크기가 같아야 하며, 이는 모든 입력의 조인 축 크기의 합계와 같아야 합니다.
Axis
형식: UINT
조인할 입력 텐서 차원의 인덱스입니다. 모든 입력 및 출력 텐서는 이 축을 제외한 모든 차원의 크기가 동일해야 합니다. 이 값은 범위에 [0, OutputTensor.DimensionCount - 1]
있어야 합니다.
예
예제 1. 가능한 축을 하나만 사용하여 텐서 조인
이 예제에서는 텐서가 네 번째 차원(축 3)을 따라 조인될 수 있습니다. 네 번째 차원의 텐서 크기가 일치하지 않으므로 다른 축을 조인할 수 없습니다.
InputCount: 2
Axis: 3
InputTensors[0]: (Sizes:{1, 1, 2, 3}, DataType:FLOAT32)
[[[[ 1, 2, 3],
[ 4, 5, 6]]]]
InputTensors[1]: (Sizes:{1, 1, 2, 4}, DataType:FLOAT32)
[[[[ 7, 8, 9, 10],
[11, 12, 13, 14]]]]
OutputTensor: (Sizes:{1, 1, 2, 7}, DataType:FLOAT32)
[[[[ 1, 2, 3, 7, 8, 9, 10],
[ 4, 5, 6, 11, 12, 13, 14]]]]
예제 2. 가능한 여러 축을 사용하여 텐서 조인:
다음 예제에서는 동일한 입력 텐서를 사용합니다. 모든 입력의 크기는 모든 차원에 동일하므로 모든 차원을 따라 조인할 수 있습니다.
InputCount: 3
InputTensors[0]: (Sizes:{1, 1, 2, 2}, DataType:FLOAT32)
[[[[1, 2],
[3, 4]]]]
InputTensors[1]: (Sizes:{1, 1, 2, 2}, DataType:FLOAT32)
[[[[5, 6],
[7, 8]]]]
InputTensors[2]: (Sizes:{1, 1, 2, 2}, DataType:FLOAT32)
[[[[9, 10],
[11, 12]]]]
조인 축 1:
Axis: 1
OutputTensor: (Sizes:{1, 3, 2, 2}, DataType:FLOAT32)
[[[[1, 2],
[3, 4]],
[[5, 6],
[7, 8]],
[[9, 10],
[11, 12]]]]
조인 축 2:
Axis: 2
OutputTensor: (Sizes:{1, 1, 6, 2}, DataType:FLOAT32)
[[[[1, 2],
[3, 4],
[5, 6],
[7, 8],
[9, 10],
[11, 12]]]]
조인 축 3:
Axis: 3
OutputTensor: (Sizes:{1, 1, 2, 6}, DataType:FLOAT32)
[[[[1, 2, 5, 6, 9, 10],
[3, 4, 7, 8, 11, 12]]]]
가용성
이 연산자는 에서 DML_FEATURE_LEVEL_1_0
도입되었습니다.
텐서 제약 조건
InputTensors 및 OutputTensor 에는 동일한 DataType 및 DimensionCount가 있어야 합니다.
텐서 지원
DML_FEATURE_LEVEL_4_1 이상
텐서 | Kind | 지원되는 차원 수 | 지원되는 데이터 형식 |
---|---|---|---|
InputTensors | 입력 배열 | 1~8개 | FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
OutputTensor | 출력 | 1~8개 | FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_3_0 이상
텐서 | Kind | 지원되는 차원 수 | 지원되는 데이터 형식 |
---|---|---|---|
InputTensors | 입력 배열 | 4~5개 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputTensor | 출력 | 4~5개 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_2_1 이상
텐서 | Kind | 지원되는 차원 수 | 지원되는 데이터 형식 |
---|---|---|---|
InputTensors | 입력 배열 | 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputTensor | 출력 | 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_1_0 이상
텐서 | Kind | 지원되는 차원 수 | 지원되는 데이터 형식 |
---|---|---|---|
InputTensors | 입력 배열 | 4 | FLOAT32, FLOAT16, INT32, INT16, UINT32, UINT16 |
OutputTensor | 출력 | 4 | FLOAT32, FLOAT16, INT32, INT16, UINT32, UINT16 |
요구 사항
머리글 | directml.h |