다음을 통해 공유


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

텐서 제약 조건

InputTensorsOutputTensor 에는 동일한 DataTypeDimensionCount가 있어야 합니다.

텐서 지원

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