在输入张量上滑动窗口中的元素中,平均量化值。 此运算符在数学上等效于取消输入的量化,然后执行平均池,然后量化输出。
Dequantize 函数
f(Input, Scale, ZeroPoint) = (Input - ZeroPoint) * Scale
Quantize 函数
f(Input, Scale, ZeroPoint) = clamp(round(Input / Scale) + ZeroPoint, Min, Max)
重要
此 API 作为 DirectML 独立可再发行组件包的一部分提供(请参阅 Microsoft.AI.DirectML 版本 1.13 及更高版本。 另请参阅 directML 版本历史记录 。
语法
struct DML_QUANTIZED_LINEAR_AVERAGE_POOLING_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* InputScaleTensor;
_Maybenull_ const DML_TENSOR_DESC* InputZeroPointTensor;
const DML_TENSOR_DESC* OutputScaleTensor;
_Maybenull_ const DML_TENSOR_DESC* OutputZeroPointTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT DimensionCount;
_Field_size_(DimensionCount) const UINT* Strides;
_Field_size_(DimensionCount) const UINT* WindowSize;
_Field_size_(DimensionCount) const UINT* StartPadding;
_Field_size_(DimensionCount) const UINT* EndPadding;
_Field_size_(DimensionCount) const UINT* Dilations;
BOOL IncludePadding;
};
成员
InputTensor
类型: const DML_TENSOR_DESC*
4D 和 5D { BatchCount, ChannelCount, Height, Width }
{ BatchCount, ChannelCount, Depth, Height, Weight }
输入张量。
InputScaleTensor
类型: const DML_TENSOR_DESC*
包含 InputTensor 缩放数据的张量。
InputScaleTensor 的预期维度是{ 1, 1, 1, 1 }
需要每张量量化,或者{ 1, ChannelCount, 1, 1 }
是否需要按通道量子化。 这些缩放值用于取消量化 InputTensor 值。
注释
小数位数值为 0 会导致未定义的行为。
InputZeroPointTensor
类型:_Maybenull_ const DML_TENSOR_DESC*
包含 InputTensor 零点数据的可选张量。
InputZeroPointTensor 的预期维度是{ 1, 1, 1, 1 }
需要每张量量化,或者{ 1, ChannelCount, 1, 1 }
是否需要按通道量化。 这些零点值用于取消量化 InputTensor 值。
OutputScaleTensor
类型: const DML_TENSOR_DESC*
包含 OutputTensor 缩放数据的张量。
OutputScaleTensor 的预期维度是{ 1, 1, 1, 1 }
需要每张量量化,或者{ 1, ChannelCount, 1, 1 }
是否需要按通道量子化。 这些缩放值用于量化 OutputTensor 值。
注释
小数位数值为 0 会导致未定义的行为。
OutputZeroPointTensor
类型:_Maybenull_ const DML_TENSOR_DESC*
包含 OutputTensor 零点数据的可选张量。
OutputZeroPointTensor 的预期维度是{ 1, 1, 1, 1 }
需要每张量量化,或者{ 1, ChannelCount, 1, 1 }
是否需要按通道量子化。 此零点值用于量化 OutputTensor 值。
OutputTensor
类型: const DML_TENSOR_DESC*
输出张量的说明。 输出张量的大小可以按如下方式计算。
OutputTensor->Sizes[0] = InputTensor->Sizes[0];
OutputTensor->Sizes[1] = InputTensor->Sizes[1];
for (UINT i = 0; i < DimensionCount; ++i) {
UINT PaddedSize = InputTensor->Sizes[i + 2] + StartPadding[i] + EndPadding[i];
OutputTensor->Sizes[i + 2] = (PaddedSize - WindowSizes[i]) / Strides[i] + 1;
}
DimensionCount
类型: UINT
输入张量 InputTensor 的空间维度数,该维度也对应于滑动窗口 WindowSize 的尺寸数。 此值还确定 Strides、 StartPadding 和 EndPadding 数组的大小。 当 InputTensor 为 4D 时,它应设置为 2,当它是 5D 张量时,应设置为 3。
Strides
类型:_Field_size_(DimensionCount) const UINT*
当 { Height, Width }
设置为 2 或设置为 3 时,滑动窗口尺寸{ Depth, Height, Width }
的步幅。
WindowSize
类型:_Field_size_(DimensionCount) const UINT*
当 { Height, Width }
设置为 2 或设置为 3 时,滑动窗口{ Depth, Height, Width }
的尺寸。
StartPadding
类型:_Field_size_(DimensionCount) const UINT*
要应用于输入张量 InputTensor 的每个空间维度的开头的填充元素数。 这些值位于 { Height, Width }
DimensionCount 设置为 2 或 { Depth, Height, Width }
设置为 3 时。
EndPadding
类型:_Field_size_(DimensionCount) const UINT*
要应用于输入张量 InputTensor 的每个空间维度末尾的填充元素数。 这些值位于 { Height, Width }
DimensionCount 设置为 2 或 { Depth, Height, Width }
设置为 3 时。
Dilations
类型:_Field_size_(DimensionCount) const UINT*
输入张量 InputTensor 的每个空间维度的值,在该维度中为该值的每个元素选择滑动窗口中的元素。 这些值位于 { Height, Width }
DimensionCount 设置为 2 或 { Depth, Height, Width }
设置为 3 时。
IncludePadding
类型: BOOL
指示在计算滑动窗口内所有元素的平均值时是否在空间边缘周围包含填充元素。 当该值设置为 FALSE 时,填充元素不会算作平均值计算的除数值的一部分。
可用性
此运算符是在 DML_FEATURE_LEVEL_6_2 中引入的。
Tensor 约束
- InputTensor 和 OutputTensor 必须具有相同 的 DimensionCount。
- InputTensor 和 InputZeroPointTensor 必须具有相同 的 DataType。
- OutputTensor 和 OutputZeroPointTensor 必须具有相同 的 DataType。
Tensor 支持
张量 | 种类 | 支持的维度计数 | 支持的数据类型 |
---|---|---|---|
InputTensor 的 | 输入 | 4 到 5 | INT8、UINT8 |
InputScaleTensor | 输入 | 1 到 5 | FLOAT32 |
InputZeroPointTensor | 可选输入 | 1 到 5 | INT8、UINT8 |
OutputScaleTensor 的 | 输入 | 1 到 5 | FLOAT32 |
输出零点张量 | 可选输入 | 1 到 5 | INT8、UINT8 |
OutputTensor | 输出 | 4 到 5 | INT8、UINT8 |
要求
页眉 | directml.h |