Поделиться через


структура DML_DIAGONAL_MATRIX_OPERATOR_DESC (directml.h)

Создает матрицу, похожую на удостоверение, с единицами (или другим явным значением) по основной диагонали и нулями везде. Диагональные могут быть смещены (с помощью смещения), где OutputTensor[i, i + Offset] = Значение, то есть аргумент Offset больше нуля сдвигает все значения вправо, а меньше нуля сдвигает их влево. Этот оператор генератора полезен для моделей, чтобы избежать хранения большого константного тензора. Все ведущие измерения до последних двух рассматриваются как число пакетов, то есть тензор обрабатывается как стек двухd матриц.

Этот оператор выполняет следующий псевдокод.

for each coordinate in OutputTensor
    OutputTensor[coordinate] = if (coordinate.y + Offset == coordinate.x) then Value else 0
endfor

Синтаксис

struct DML_DIAGONAL_MATRIX_OPERATOR_DESC {
  const DML_TENSOR_DESC *OutputTensor;
  INT                   Offset;
  FLOAT                 Value;
};

Члены

OutputTensor

Тип: const DML_TENSOR_DESC*

Тензор для записи результатов. Измерения : { Batch1, Batch2, OutputHeight, OutputWidth }. Высота и ширина не должны быть квадратными.

Offset

Тип: INT

Смещение для смещения диагональных линий Значения с положительными смещениями вправо или вверх (просмотр выходных данных в виде матрицы с верхним левым значением 0,0) и отрицательными смещениями влево/вниз.

Value

Тип: FLOAT

Значение для заполнения вдоль двухd-диагонали. Стандартное значение — 1,0. Обратите внимание, что если DataType тензоров не DML_TENSOR_DATA_TYPE_FLOAT16 или не DML_TENSOR_DATA_TYPE_FLOAT32, то значение может быть усечено (например, 10,6 станет 10).

Примеры

Матрица удостоверений по умолчанию:

Offset: 0
Value: 1.0
OutputTensor: (Sizes:{1,1,3,3}, DataType:FLOAT32)
    [[[[1, 0, 0],
       [0, 1, 0],
       [0, 0, 1]]]]

Сместить вправо или вверх:

Offset: 1
Value: 1.0
OutputTensor: (Sizes:{1,1,3,3}, DataType:FLOAT32)
    [[[[ 0, 1, 0],
       [ 0, 0, 1],
       [ 0, 0, 0]]]]

Сместить влево или вниз:

Offset: -1
Value: 1.0
OutputTensor: (Sizes:{1,1,3,2}, DataType:FLOAT32)
    [[[[0, 0],
       [1, 0],
       [0, 1]]]]

Сместите диагональную линию настолько, чтобы все они стали нулями:

Offset: -3
Value: 1.0
OutputTensor: (Sizes:{1,1,3,2}, DataType:FLOAT32)
    [[[[0, 0],
       [0, 0],
       [0, 0]]]]

Комментарии

Доступность

Этот оператор появился в DML_FEATURE_LEVEL_2_0.

Поддержка тензоров

DML_FEATURE_LEVEL_5_1 и выше

Тензор Kind Поддерживаемые счетчики измерений Поддерживаемые типы данных
OutputTensor Выходные данные От 2 до 4 FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8

DML_FEATURE_LEVEL_4_0 и выше

Тензор Kind Поддерживаемые счетчики измерений Поддерживаемые типы данных
OutputTensor Выходные данные От 2 до 4 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8

DML_FEATURE_LEVEL_2_1 и выше

Тензор Kind Поддерживаемые счетчики измерений Поддерживаемые типы данных
OutputTensor Выходные данные 4 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8

DML_FEATURE_LEVEL_2_0 и выше

Тензор Kind Поддерживаемые счетчики измерений Поддерживаемые типы данных
OutputTensor Выходные данные 4 FLOAT32, FLOAT16

Требования

Требование Значение
Минимальная версия клиента Windows 10, версия 2004 (10.0; Сборка 19041)
Минимальная версия сервера Windows Server версии 2004 (10.0; Сборка 19041)
Верхняя часть directml.h