다음을 통해 공유


DML_PADDING_OPERATOR_DESC 구조체(directml.h)

에지에 상수 또는 미러 값이 있는 입력 텐서를 팽창시키고 결과를 출력에 씁니다.

구문

struct DML_PADDING_OPERATOR_DESC {
  const DML_TENSOR_DESC *InputTensor;
  const DML_TENSOR_DESC *OutputTensor;
  DML_PADDING_MODE      PaddingMode;
  FLOAT                 PaddingValue;
  UINT                  DimensionCount;
  const UINT            *StartPadding;
  const UINT            *EndPadding;
};

멤버

InputTensor

형식: const DML_TENSOR_DESC*

입력 데이터를 포함하는 텐서입니다.

OutputTensor

형식: const DML_TENSOR_DESC*

출력 데이터를 포함하는 텐서입니다. 각 차원 i에 대해 입니다 OutputTensor.Sizes[i] = InputTensor.Sizes[i] + StartPadding[i] + EndPadding[i].

PaddingMode

형식: DML_PADDING_MODE

안쪽 여백 영역을 채울 때 사용할 패딩 모드입니다.

  • DML_PADDING_MODE_CONSTANT. 모든 패딩 값에 PaddingValue 로 정의된 단일 상수 값을 사용합니다( 예제 1 참조).
  • DML_PADDING_MODE_EDGE. 각 차원에 대해 모든 안쪽 여백 값에 해당 차원의 에지 값을 사용합니다( 예제 2 참조).
  • DML_PADDING_MODE_REFLECTION. 가장자리에서 바로 접은 것처럼 텐서의 값을 미러링합니다. 즉, 가장자리가 미러되지 않습니다. StartPadding[i] >= InputTensor.Sizes[i]EndPadding[i] >= InputTensor.Sizes[i] 는 유효합니다. 즉, 이전 안쪽 여백 영역에 접어서 새 안쪽 여백 영역을 주기적으로 미러 수 있습니다(예제 3 참조).
  • DML_PADDING_MODE_SYMMETRIC. DML_PADDING_MODE_REFLECTION 비슷하지만 가장자리도 미러됩니다. StartPadding[i] > InputTensor.Sizes[i]EndPadding[i] > InputTensor.Sizes[i] 는 유효합니다. 즉, 이전 안쪽 여백 영역에 접어서 새 안쪽 여백 영역을 주기적으로 미러 수 있습니다(예제 4 참조). 이 모드는 기능 수준에서 DML_FEATURE_LEVEL_3_0도입되었습니다.

PaddingValue

형식: FLOAT

때 사용할 PaddingMode == DML_PADDING_MODE_CONSTANT패딩 값입니다. 이 값은 다른 패딩 모드에서는 무시됩니다. 텐서의 DataTypeDML_TENSOR_DATA_TYPE_FLOAT16 또는 DML_TENSOR_DATA_TYPE_FLOAT32 않으면 값이 잘리게 될 수 있습니다(예: 10.6은 10이 됩니다).

DimensionCount

형식: UINT

StartPadding 및 EndPadding에서 가리키는 배열의 크기입니다. 이 값은 InputTensorOutputTensor의 차원 수와 같아야 합니다.

StartPadding

형식: _Field_size_(DimensionCount) const UINT*

각 차원의 시작 부분에 추가할 안쪽 여백 영역의 크기입니다. 각 차원 i에 대해 입니다 StartPadding[i] = OutputTensor.Sizes[i] - InputTensor.Sizes[i] - EndPadding[i].

EndPadding

형식: _Field_size_(DimensionCount) const UINT*

각 차원의 끝에 추가할 안쪽 여백 영역의 크기입니다. 각 차원 i에 대해 입니다 EndPadding[i] = OutputTensor.Sizes[i] - InputTensor.Sizes[i] - StartPadding[i].

예제

예 1

PaddingMode: DML_PADDING_MODE_CONSTANT
PaddingValue: 9
StartPadding: {0, 0, 1, 2}
EndPadding: {0, 0, 3, 4}

InputTensor: (Sizes:{1, 1, 4, 4}, DataType:FLOAT32)
[[[[1, 2, 3, 4],
   [5, 6, 7, 8],
   [1, 2, 3, 4],
   [5, 6, 7, 8]]]]

OutputTensor: (Sizes:{1, 1, 8, 10}, DataType:FLOAT32)
[[[[9, 9, 9, 9, 9, 9, 9, 9, 9, 9]
   [9, 9, 1, 2, 3, 4, 9, 9, 9, 9],
   [9, 9, 5, 6, 7, 8, 9, 9, 9, 9],
   [9, 9, 1, 2, 3, 4, 9, 9, 9, 9],
   [9, 9, 5, 6, 7, 8, 9, 9, 9, 9],
   [9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
   [9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
   [9, 9, 9, 9, 9, 9, 9, 9, 9, 9]]]]

예 2

PaddingMode: DML_PADDING_MODE_EDGE
StartPadding: {0, 0, 1, 2}
EndPadding: {0, 0, 3, 4}

InputTensor: (Sizes:{1, 1, 4, 4}, DataType:FLOAT32)
[[[[1, 2, 3, 4],
   [5, 6, 7, 8],
   [1, 2, 3, 4],
   [5, 6, 7, 8]]]]

OutputTensor: (Sizes:{1, 1, 8, 10}, DataType:FLOAT32)
[[[[1, 1, 1, 2, 3, 4, 4, 4, 4, 4]
   [1, 1, 1, 2, 3, 4, 4, 4, 4, 4],
   [5, 5, 5, 6, 7, 8, 8, 8, 8, 8],
   [1, 1, 1, 2, 3, 4, 4, 4, 4, 4],
   [5, 5, 5, 6, 7, 8, 8, 8, 8, 8],
   [5, 5, 5, 6, 7, 8, 8, 8, 8, 8],
   [5, 5, 5, 6, 7, 8, 8, 8, 8, 8],
   [5, 5, 5, 6, 7, 8, 8, 8, 8, 8]]]]

예제 3

PaddingMode: DML_PADDING_MODE_REFLECTION
StartPadding: {0, 0, 1, 2}
EndPadding: {0, 0, 3, 4}

InputTensor: (Sizes:{1, 1, 4, 4}, DataType:FLOAT32)
[[[[1, 2, 3, 4],
   [5, 6, 7, 8],
   [1, 2, 3, 4],
   [5, 6, 7, 8]]]]

OutputTensor: (Sizes:{1, 1, 8, 10}, DataType:FLOAT32)
[[[[7, 6, 5, 6, 7, 8, 7, 6, 5, 6]
   [3, 2, 1, 2, 3, 4, 3, 2, 1, 2],
   [7, 6, 5, 6, 7, 8, 7, 6, 5, 6],
   [3, 2, 1, 2, 3, 4, 3, 2, 1, 2],
   [7, 6, 5, 6, 7, 8, 7, 6, 5, 6],
   [3, 2, 1, 2, 3, 4, 3, 2, 1, 2],
   [7, 6, 5, 6, 7, 8, 7, 6, 5, 6],
   [3, 2, 1, 2, 3, 4, 3, 2, 1, 2]]]]

예제 4(부터 DML_FEATURE_LEVEL_3_0시작)

PaddingMode: DML_PADDING_MODE_SYMMETRIC
StartPadding: {0, 0, 1, 2}
EndPadding: {0, 0, 3, 4}

InputTensor: (Sizes:{1, 1, 4, 4}, DataType:FLOAT32)
[[[[1, 2, 3, 4],
   [5, 6, 7, 8],
   [1, 2, 3, 4],
   [5, 6, 7, 8]]]]

OutputTensor: (Sizes:{1, 1, 8, 10}, DataType:FLOAT32)
[[[[2, 1, 1, 2, 3, 4, 4, 3, 2, 1]
   [2, 1, 1, 2, 3, 4, 4, 3, 2, 1],
   [6, 5, 5, 6, 7, 8, 8, 7, 6, 5],
   [2, 1, 1, 2, 3, 4, 4, 3, 2, 1],
   [6, 5, 5, 6, 7, 8, 8, 7, 6, 5],
   [6, 5, 5, 6, 7, 8, 8, 7, 6, 5],
   [2, 1, 1, 2, 3, 4, 4, 3, 2, 1],
   [6, 5, 5, 6, 7, 8, 8, 7, 6, 5]]]]

가용성

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

텐서 제약 조건

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

텐서 지원

DML_FEATURE_LEVEL_5_0 이상

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

텐서 Kind 지원되는 차원 수 지원되는 데이터 형식
InputTensor 입력 1~8개 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8
OutputTensor 출력 1~8개 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8

DML_FEATURE_LEVEL_2_1 이상

텐서 Kind 지원되는 차원 수 지원되는 데이터 형식
InputTensor 입력 4~5개 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8
OutputTensor 출력 4~5개 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8

DML_FEATURE_LEVEL_1_0 이상

텐서 Kind 지원되는 차원 수 지원되는 데이터 형식
InputTensor 입력 4~5개 FLOAT32, FLOAT16
OutputTensor 출력 4~5개 FLOAT32, FLOAT16

요구 사항

   
머리글 directml.h