DML_QUANTIZED_LINEAR_CONVOLUTION_OPERATOR_DESC 구조체(directml.h)
InputTensor사용하여 FilterTensor 구성을 수행합니다. 이 연산자는 정량화된 데이터에 대해 정방향 연결을 수행합니다. 이 연산자는 입력을 정량화하고 출력을 계산한 다음 정량화하는 것과 수학적으로 동일합니다.
이 연산자가 사용하는 정량화 선형 함수는 선형 양자화 함수입니다.
함수 시퀀스 해제
f(Input, Scale, ZeroPoint) = (Input - ZeroPoint) * Scale
함수 수량화
f(Input, Scale, ZeroPoint) = clamp(round(Input / Scale) + ZeroPoint, Min, Max)
통사론
struct DML_QUANTIZED_LINEAR_CONVOLUTION_OPERATOR_DESC {
const DML_TENSOR_DESC *InputTensor;
const DML_TENSOR_DESC *InputScaleTensor;
const DML_TENSOR_DESC *InputZeroPointTensor;
const DML_TENSOR_DESC *FilterTensor;
const DML_TENSOR_DESC *FilterScaleTensor;
const DML_TENSOR_DESC *FilterZeroPointTensor;
const DML_TENSOR_DESC *BiasTensor;
const DML_TENSOR_DESC *OutputScaleTensor;
const DML_TENSOR_DESC *OutputZeroPointTensor;
const DML_TENSOR_DESC *OutputTensor;
UINT DimensionCount;
const UINT *Strides;
const UINT *Dilations;
const UINT *StartPadding;
const UINT *EndPadding;
UINT GroupCount;
};
회원
InputTensor
형식: const DML_TENSOR_DESC*
입력 데이터를 포함하는 텐서입니다.
InputTensor 예상 차원은 { InputBatchCount, InputChannelCount, InputHeight, InputWidth }
.
InputScaleTensor
형식: const DML_TENSOR_DESC*
입력 배율 데이터를 포함하는 텐서입니다.
InputScaleTensor
예상 차원이 { 1, 1, 1, 1 }
. 이 배율 값은 입력 값의 시한을 지정하는 데 사용됩니다.
메모
배율 값이 0이면 정의되지 않은 동작이 발생합니다.
InputZeroPointTensor
형식: _Maybenull_ const DML_TENSOR_DESC*
입력 0포인트 데이터를 포함하는 선택적 텐서입니다.
InputZeroPointTensor 예상 차원은 { 1, 1, 1, 1 }
. 이 0포인트 값은 입력 값의 시한을 지정하는 데 사용됩니다.
FilterTensor
형식: const DML_TENSOR_DESC*
필터 데이터를 포함하는 텐서입니다.
FilterTensor 예상 차원은 { FilterBatchCount, FilterChannelCount, FilterHeight, FilterWidth }
.
FilterScaleTensor
형식: const DML_TENSOR_DESC*
필터 배율 데이터를 포함하는 텐서입니다.
FilterScaleTensor
예상 차원은 텐서당 정량화가 필요한 경우 { 1, 1, 1, 1 }
채널당 정량화가 필요한 경우 { 1, OutputChannelCount, 1, 1 }
. 이 배율 값은 필터 값의 시한을 지정하는 데 사용됩니다.
메모
배율 값이 0이면 정의되지 않은 동작이 발생합니다.
FilterZeroPointTensor
형식: _Maybenull_ const DML_TENSOR_DESC*
필터 0포인트 데이터를 포함하는 선택적 텐서입니다.
FilterZeroPointTensor 예상 차원은 텐서당 정량화가 필요한 경우 { 1, 1, 1, 1 }
채널당 정량화가 필요한 경우 { 1, OutputChannelCount, 1, 1 }
. 이 0포인트 값은 필터 값의 시한을 지정하는 데 사용됩니다.
BiasTensor
형식: _Maybenull_ const DML_TENSOR_DESC*
바이어스 데이터를 포함하는 텐서입니다. 바이어스 텐서(bias tensor)는 결과에 추가되는 컨볼루션 끝의 출력 텐서에서 브로드캐스트되는 데이터를 포함하는 텐서입니다. BiasTensor의 예상 차원은 4D에 대해 { 1, OutputChannelCount, 1, 1 }
.
OutputScaleTensor
형식: const DML_TENSOR_DESC*
출력 배율 데이터를 포함하는 텐서입니다. OutputScaleTensor의 예상 차원은 { 1, 1, 1, 1 }
. 이 입력 배율 값은 컨볼루션 출력 값을 정량화하는 데 사용됩니다.
메모
배율 값이 0이면 정의되지 않은 동작이 발생합니다.
OutputZeroPointTensor
형식: _Maybenull_ const DML_TENSOR_DESC*
필터 0포인트 데이터를 포함하는 선택적 텐서입니다. OutputZeroPointTensor의 예상 차원은 { 1, 1, 1, 1 }
. 이 입력 0포인트 값은 출력 값의 컨볼루션을 정량화하는 데 사용됩니다.
OutputTensor
형식: const DML_TENSOR_DESC*
결과를 쓸 텐서입니다. OutputTensor의 예상 차원은 { OutputBatchCount, OutputChannelCount, OutputHeight, OutputWidth }
.
DimensionCount
형식: UINT
컨볼루션 작업의 공간 차원 수입니다. 공간 차원은 FilterTensor
Strides
형식: _Field_size_(DimensionCount) const UINT*
나선형 작업의 보폭입니다. 이러한 보폭은 나선형 필터에 적용됩니다. DML_TENSOR_DESC포함된 텐서 보폭과는 별개입니다.
Dilations
형식: _Field_size_(DimensionCount) const UINT*
컨볼루션 연산의 팽창입니다. 팽창은 필터 커널의 요소에 적용되는 보폭입니다. 내부 필터 커널 요소를 0으로 패딩하여 더 큰 필터 커널을 시뮬레이션하는 효과가 있습니다.
StartPadding
형식: _Field_size_(DimensionCount) const UINT*
컨볼루션 작업의 필터 및 입력 텐서의 각 공간 차원의 시작 부분에 적용할 패딩 값입니다.
EndPadding
형식: _Field_size_(DimensionCount) const UINT*
컨볼루션 작업의 필터 및 입력 텐서의 각 공간 차원 끝에 적용할 패딩 값입니다.
GroupCount
형식: UINT
컨볼루션 작업을 나눌 그룹 수입니다. GroupCount 사용하여 GroupCount를 입력 채널 수와 같게 설정하여 깊이를 수 있습니다. 이렇게 하면 변환을 입력 채널당 별도의 컨볼루션으로 나눕니다.
가용도
이 연산자는 DML_FEATURE_LEVEL_2_1
도입되었습니다.
Tensor 제약 조건
- BiasTensor, FilterTensor, InputTensor및 OutputTensor 동일한 DimensionCount있어야 합니다.
- OutputTensor 및 OutputZeroPointTensor 동일한 DataType있어야 합니다.
- InputTensor 및 InputZeroPointTensor 동일한 DataType있어야 합니다.
- FilterTensor 및 FilterZeroPointTensor 동일한 DataType있어야 합니다.
Tensor 지원
DML_FEATURE_LEVEL_5_2 이상
텐서 | 종류 | 지원되는 차원 수 | 지원되는 데이터 형식 |
---|---|---|---|
InputTensor | 입력 | 3~4 | INT8, UINT8 |
InputScaleTensor | 입력 | 1~4 | FLOAT32 |
InputZeroPointTensor | 선택적 입력 | 1~4 | INT8, UINT8 |
FilterTensor | 입력 | 3~4 | INT8, UINT8 |
FilterScaleTensor | 입력 | 1~4 | FLOAT32 |
FilterZeroPointTensor | 선택적 입력 | 1~4 | INT8, UINT8 |
BiasTensor | 선택적 입력 | 3~4 | INT32 |
OutputScaleTensor | 입력 | 1~4 | FLOAT32 |
OutputZeroPointTensor | 선택적 입력 | 1~4 | INT8, UINT8 |
OutputTensor | 출력 | 3~4 | INT8, UINT8 |
DML_FEATURE_LEVEL_4_0 이상
텐서 | 종류 | 지원되는 차원 수 | 지원되는 데이터 형식 |
---|---|---|---|
InputTensor | 입력 | 3~4 | INT8, UINT8 |
InputScaleTensor | 입력 | 1~4 | FLOAT32 |
InputZeroPointTensor | 선택적 입력 | 1~4 | INT8, UINT8 |
FilterTensor | 입력 | 3~4 | INT8, UINT8 |
FilterScaleTensor | 입력 | 3~4 | FLOAT32 |
FilterZeroPointTensor | 선택적 입력 | 1~4 | INT8, UINT8 |
BiasTensor | 선택적 입력 | 3~4 | INT32 |
OutputScaleTensor | 입력 | 1~4 | FLOAT32 |
OutputZeroPointTensor | 선택적 입력 | 1~4 | INT8, UINT8 |
OutputTensor | 출력 | 3~4 | INT8, UINT8 |
DML_FEATURE_LEVEL_2_1 이상
텐서 | 종류 | 지원되는 차원 수 | 지원되는 데이터 형식 |
---|---|---|---|
InputTensor | 입력 | 4 | INT8, UINT8 |
InputScaleTensor | 입력 | 4 | FLOAT32 |
InputZeroPointTensor | 선택적 입력 | 4 | INT8, UINT8 |
FilterTensor | 입력 | 4 | INT8, UINT8 |
FilterScaleTensor | 입력 | 4 | FLOAT32 |
FilterZeroPointTensor | 선택적 입력 | 4 | INT8, UINT8 |
BiasTensor | 선택적 입력 | 4 | INT32 |
OutputScaleTensor | 입력 | 4 | FLOAT32 |
OutputZeroPointTensor | 선택적 입력 | 4 | INT8, UINT8 |
OutputTensor | 출력 | 4 | INT8, UINT8 |
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 10 빌드 20348 |
지원되는 최소 서버 | Windows 10 빌드 20348 |
헤더 | directml.h |