DML_QUANTIZED_LINEAR_CONVOLUTION_OPERATOR_DESC结构(directml.h)
使用 InputTensor执行 FilterTensor 的卷积。 此运算符对量化数据执行转发卷积。 此运算符在数学上等效于取消输入的量化、卷积,然后量化输出。
此运算符使用的量子化线性函数是线性量化函数
Dequantize 函数
f(Input, Scale, ZeroPoint) = (Input - ZeroPoint) * Scale
Quantize 函数
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*
包含输入零点数据的可选张量。
InputZeroPointTensor 的预期维度 { 1, 1, 1, 1 }
。 此零点值用于取消输入值的量化。
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*
包含筛选器零点数据的可选张量。 如果需要每个张量量子化,FilterZeroPointTensor 的预期维度 { 1, 1, 1, 1 }
;如果需要每个通道量子化,则 { 1, OutputChannelCount, 1, 1 }
。 此零点值用于取消筛选值的量化。
BiasTensor
类型:_Maybenull_ const DML_TENSOR_DESC*
包含偏差数据的张量。 偏差张量是一个张量,其中包含在卷积末尾的输出张量中广播的数据,该卷积添加到结果中。 BiasTensor 的预期维度 { 1, OutputChannelCount, 1, 1 }
4D。
OutputScaleTensor
类型:const DML_TENSOR_DESC*
包含输出缩放数据的张量。 OutputScaleTensor 的预期维度 { 1, 1, 1, 1 }
。 此输入刻度值用于量化卷积输出值。
注意
小数位数值为 0 会导致未定义的行为。
OutputZeroPointTensor
类型:_Maybenull_ const DML_TENSOR_DESC*
包含筛选器零点数据的可选张量。 OutputZeroPointTensor 的预期维度 { 1, 1, 1, 1 }
。 此输入零点值用于量化输出值的卷积。
OutputTensor
类型:const DML_TENSOR_DESC*
要向其写入结果的张量。 OutputTensor 的预期维度 { OutputBatchCount, OutputChannelCount, OutputHeight, OutputWidth }
。
DimensionCount
类型:UINT
卷积操作的空间维度数。 空间维度是卷积筛选器张量 FilterTensor的较低维度。 此值还确定 Strides、Dilations、StartPadding和 EndPadding 数组的大小。 仅支持值 2。
Strides
类型:_Field_size_(DimensionCount) const UINT*
卷积运算的步幅。 这些步幅应用于卷积筛选器。 它们与 DML_TENSOR_DESC中包含的张量步幅分开。
Dilations
类型:_Field_size_(DimensionCount) const UINT*
卷积运算的 Dilations。 分步应用于筛选器内核的元素。 这可以通过用零填充内部筛选器内核元素来模拟更大的筛选器内核。
StartPadding
类型:_Field_size_(DimensionCount) const UINT*
要应用于筛选器的每个空间维度的开头和卷积运算的输入张量的填充值。
EndPadding
类型:_Field_size_(DimensionCount) const UINT*
要应用于筛选器的每个空间维度末尾的填充值和卷积运算的输入张量。
GroupCount
类型:UINT
要将卷积运算划分为的组数。 GroupCount 可以通过将 Group Count 设置为等于输入通道计数来实现深度卷积。 这会将卷积划分为每个输入通道的单独卷积。
可用性
此运算符是在 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 |