共用方式為


DML_QUANTIZED_LINEAR_AVERAGE_POOLING_OPERATOR_DESC 結構 (directml.h)

平均在輸入張量上方滑動視窗內元素的量化值。 這個運算符在數學上相當於取消量化輸入,然後執行平均共享,然後量化輸出。

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 的維度數目。 這個值也會決定 StridesStartPadding 和 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 } 設定為 2,或設定為 3 時,這些值位於 { Depth, Height, Width } 中。

EndPadding

類型:_Field_size_(DimensionCount) const UINT*

要套用至輸入張量 InputTensor 之每個空間維度結尾的填補元素數目。 當 { Height, Width } 設定為 2,或設定為 3 時,這些值位於 { Depth, Height, Width } 中。

Dilations

類型:_Field_size_(DimensionCount) const UINT*

輸入張量輸入張量 InputTensor 的每個空間維度值,為該值的每個元素選取滑動視窗內的元素。 當 { Height, Width } 設定為 2,或設定為 3 時,這些值位於 { Depth, Height, Width } 中。

IncludePadding

類型: BOOL

指出在計算滑動視窗內所有元素的平均值時,是否要在空間邊緣周圍包含填補專案。 當值設定為 FALSE 時,填補元素不會算作平均計算之除數值的一部分。

可用性

此運算子是在 DML_FEATURE_LEVEL_6_2 中引進的。

Tensor 條件約束

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

Tensor 支援

張量 仁慈 (if context refers to kindness) 支援的維度計數 支援的數據類型
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