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
OutputTensor.DataType과 일치해야 하는 PaddingValue 멤버의 데이터 형식입니다.
PaddingValue
형식: DML_SCALAR_UNION
PaddingValueDataType에서 필드를 해석하는 방법을 결정하는 경우 사용할 PaddingMode == DML_PADDING_MODE_CONSTANT
패딩 값입니다. 다른 패딩 모드에서는 이 값이 무시됩니다.
DimensionCount
형식: UINT
StartPadding 및 EndPadding에서 가리키는 배열의 크기입니다. 이 값은 InputTensor 및 OutputTensor의 차원 수와 동일해야 합니다.
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 도입되었습니다.
텐서 제약 조건
InputTensor 및 OutputTensor 에는 동일한 DataType 및 DimensionCount가 있어야 합니다.
텐서 지원
텐서 | 종류 | 지원되는 차원 수 | 지원되는 데이터 형식 |
---|---|---|---|
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 |