다음을 통해 공유


DML_PADDING1_OPERATOR_DESC 구조체(directml.h)

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

구문

struct DML_PADDING1_OPERATOR_DESC {
  const DML_TENSOR_DESC *InputTensor;
  const DML_TENSOR_DESC *OutputTensor;
  DML_PADDING_MODE      PaddingMode;
  DML_TENSOR_DATA_TYPE  PaddingValueDataType;
  DML_SCALAR_UNION      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도입되었습니다.

PaddingValueDataType

형식: DML_TENSOR_DATA_TYPE

OutputTensor.DataType과 일치해야 하는 PaddingValue 멤버의 데이터 형식입니다.

PaddingValue

형식: DML_SCALAR_UNION

PaddingValueDataType에서 필드를 해석하는 방법을 결정하는 경우 사용할 PaddingMode == DML_PADDING_MODE_CONSTANT패딩 값입니다. 다른 패딩 모드에서는 이 값이 무시됩니다.

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

텐서 제약 조건

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

텐서 지원

텐서 종류 지원되는 차원 수 지원되는 데이터 형식
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

요구 사항

요구 사항
헤더 directml.h