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
패딩 값입니다. 이 값은 다른 패딩 모드에서는 무시됩니다. 텐서의 DataType 이 DML_TENSOR_DATA_TYPE_FLOAT16 또는 DML_TENSOR_DATA_TYPE_FLOAT32 않으면 값이 잘리게 될 수 있습니다(예: 10.6은 10이 됩니다).
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
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
도입되었습니다.
텐서 제약 조건
InputTensor 및 OutputTensor 에는 동일한 DataType 및 DimensionCount가 있어야 합니다.
텐서 지원
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 |