структура DML_QUANTIZED_LINEAR_CONVOLUTION_OPERATOR_DESC (directml.h)
Выполняет свертку FilterTensor с InputTensor. Этот оператор выполняет переадресацию в квантизованных данных. Этот оператор математически эквивалентен деквиализации входных данных, сверток, а затем квантизации выходных данных.
Квантизация линейных функций, используемых этим оператором, — это функции линейной квантизации.
Декванциализация функции
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
Тип: _Возможноnull_ 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
Тип: _Возможноnull_ const DML_TENSOR_DESC*
Необязательный тензор, содержащий данные о нулевых точках фильтра. Ожидаемые измерения FilterZeroPointTensor{ 1, 1, 1, 1 }
, если требуется тензорная квантизация или { 1, OutputChannelCount, 1, 1 }
, если требуется квантизация каналов. Это значение нулевой точки используется для декванизации значений фильтра.
BiasTensor
Тип: _Возможноnull_ const DML_TENSOR_DESC*
Тензор, содержащий данные предвзятости. Тензор предвзятости — это тензор, содержащий данные, которые передаются через выходной тензор в конце свертки, который добавляется в результат. Ожидаемые измерения Предвзятого элемента { 1, OutputChannelCount, 1, 1 }
для 4D.
OutputScaleTensor
Тип: const DML_TENSOR_DESC*
Тензор, содержащий выходные данные масштабирования. Ожидаемые измерения OutputScaleTensor { 1, 1, 1, 1 }
. Это входное значение масштабирования используется для квантизации выходных значений сверток.
Заметка
Значение шкалы 0 приводит к неопределенному поведению.
OutputZeroPointTensor
Тип: _Возможноnull_ const DML_TENSOR_DESC*
Необязательный тензор, содержащий данные о нулевых точках фильтра. Ожидаемые измерения OutputZeroPointTensor { 1, 1, 1, 1 }
. Это значение нулевой точки ввода используется для квантизации сверток выходных значений.
OutputTensor
Тип: const DML_TENSOR_DESC*
Тензор для записи результатов. Ожидаемые измерения OutputTensor { OutputBatchCount, OutputChannelCount, OutputHeight, OutputWidth }
.
DimensionCount
Тип: UINT
Количество пространственных измерений для операции свертки. Пространственные измерения — это нижние измерения тензора фильтра сверток FilterTensor. Это значение также определяет размер
Strides
Тип: _Field_size_(DimensionCount) const UINT*
Шаги операции свертки. Эти шаги применяются к фильтру сверток. Они отделены от тензорных успехов, включенных в DML_TENSOR_DESC.
Dilations
Тип: _Field_size_(DimensionCount) const UINT*
Диляция операции свертывания. Диляция применяется к элементам ядра фильтра. Это влияет на имитацию ядра фильтра большего размера путем заполнения внутренних элементов ядра фильтра нулями.
StartPadding
Тип: _Field_size_(DimensionCount) const UINT*
Значения заполнения, применяемые к началу каждого пространственного измерения фильтра и тензора ввода операции свертки.
EndPadding
Тип: _Field_size_(DimensionCount) const UINT*
Значения заполнения, применяемые к концу каждого пространственного измерения фильтра и тензора ввода операции свертки.
GroupCount
Тип: UINT
Количество групп, на которые необходимо разделить операцию свертки. GroupCount можно использовать для достижения глубинной свертки, задав GroupCount равным количеству входных каналов. Это делит свертку вверх на отдельный сверток на входной канал.
Наличие
Этот оператор появился в 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 |
Предвзятость | Необязательные входные данные | От 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 |
Предвзятость | Необязательные входные данные | От 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 |
Предвзятость | Необязательные входные данные | 4 | INT32 |
OutputScaleTensor | Ввод | 4 | FLOAT32 |
OutputZeroPointTensor | Необязательные входные данные | 4 | INT8, UINT8 |
OutputTensor | Выпуск | 4 | INT8, UINT8 |
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Сборка Windows 10 20348 |
минимальный поддерживаемый сервер | Сборка Windows 10 20348 |
заголовка | directml.h |