DML_QUANTIZED_LINEAR_AVERAGE_POOLING_OPERATOR_DESC 结构 (directml.h)

通过输入张量计算滑动窗口中元素的量化值的平均值。 此运算符在数学上等效于对输入进行去量化、平均池化,然后量化输出。

去量化函数

f(Input, Scale, ZeroPoint) = (Input - ZeroPoint) * Scale

量化函数

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 大小 { BatchCount, ChannelCount, Height, Width } 和 5D 大小 { BatchCount, ChannelCount, Depth, Height, Weight } 的输入张量。

InputScaleTensor

类型:const DML_TENSOR_DESC*

包含 InputTensor 刻度数据的张量。 如果需要按张量量化,则 InputScaleTensor 的预期维度为 { 1, 1, 1, 1 },或者如果需要按通道量化,则预期维度为 { 1, ChannelCount, 1, 1 }。 这些刻度值用于对 InputTensor 值进行去量化。

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 值。

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 的维度数。 此值还可用于确定 StridesStartPaddingEndPadding 数组的大小。 当 InputTensor 为 4D 张量时,应设置为 2,当它为 5D 张量时,应设置为 3。

Strides

类型:_Field_size_(DimensionCount) const UINT*

DimensionCount 设置为 2 时大小为 { Height, Width } 的滑动窗口维度的步幅,或者设置为 3 时大小为 { Depth, Height, Width } 的滑动窗口维度的步幅。

WindowSize

类型:_Field_size_(DimensionCount) const UINT*

DimensionCount 设置为 2 时 { Height, Width } 中滑动窗口的维度,或设置为 3 时 { Depth, Height, Width } 中滑动窗口的维度。

StartPadding

类型:_Field_size_(DimensionCount) const UINT*

要应用于输入张量 InputTensor 的每个空间维度的开头的填充元素数。 当 DimensionCount 设置为 2 时这些值在 { Height, Width } 中,或者设置为 3 时这些值在 { Depth, Height, Width } 中。

EndPadding

类型:_Field_size_(DimensionCount) const UINT*

要应用于输入张量 InputTensor 的每个空间维度的末尾的填充元素数。 当 DimensionCount 设置为 2 时这些值在 { Height, Width } 中,或者设置为 3 时这些值在 { Depth, Height, Width } 中。

Dilations

类型:_Field_size_(DimensionCount) const UINT*

输入张量 InputTensor 的每个空间维度的值,在该维度中为该值的每个元素选择滑动窗口中的元素。 当 DimensionCount 设置为 2 时这些值在 { Height, Width } 中,或者设置为 3 时这些值在 { Depth, Height, Width } 中。

IncludePadding

类型:BOOL

指示在计算滑动窗口内所有元素的平均值时,是否在空间边缘周围包括填充元素。 当该值设置为 FALSE 时,填充元素不会算作平均值计算的除数值的一部分。

可用性

此运算符是在 DML_FEATURE_LEVEL_6_2 中引入的。

张量约束

  • InputTensorOutputTensor 必须具有相同的 DimensionCount
  • InputTensorInputZeroPointTensor 必须具有相同的 DataType
  • OutputTensorOutputZeroPointTensor 必须具有相同的 DataType

张量支持

张量 种类 支持的维度计数 支持的数据类型
InputTensor 输入 4 到 5 INT8、UINT8
InputScaleTensor 输入 1 到 5 FLOAT32
InputZeroPointTensor 可选输入 1 到 5 INT8、UINT8
OutputScaleTensor 输入 1 到 5 FLOAT32
OutputZeroPointTensor 可选输入 1 到 5 INT8、UINT8
OutputTensor 输出 4 到 5 INT8、UINT8

要求

   
页眉 directml.h