平均在輸入張量上方滑動視窗內元素的量化值。 這個運算符在數學上相當於取消量化輸入,然後執行平均共享,然後量化輸出。
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 } 設定為 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 條件約束
- InputTensor 和 OutputTensor 必須具有相同 的 DimensionCount。
- InputTensor 和 InputZeroPointTensor 必須具有相同 的 DataType。
- OutputTensor 和 OutputZeroPointTensor 必須具有相同 的 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 |