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


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

Вычисляет N-мерные координаты всех ненулевых элементов входного тензора.

Этот оператор создает матрицу значений MxN, где каждая строка M содержит N-мерную координату ненулевого значения из входных данных. При использовании FLOAT32 или FLOAT16 входных данных отрицательные и положительные значения 0 (0,0f и -0,0f) обрабатываются как ноль для целей этого оператора.

Оператор требует, чтобы outputCoordinatesTensor был достаточно большим, чтобы вместить в наихудший сценарий, где каждый элемент входных данных не равен нулю. Этот оператор возвращает число ненулевых элементов через OutputCountTensor, который вызывающие элементы могут проверить, чтобы определить количество координат, записанных в OutputCoordinatesTensor.

Синтаксис

struct DML_NONZERO_COORDINATES_OPERATOR_DESC {
  const DML_TENSOR_DESC *InputTensor;
  const DML_TENSOR_DESC *OutputCountTensor;
  const DML_TENSOR_DESC *OutputCoordinatesTensor;
};

Члены

InputTensor

Тип: const DML_TENSOR_DESC*

Входной тензор.

OutputCountTensor

Тип: const DML_TENSOR_DESC*

Выходной тензор, содержащий количество ненулевых элементов во входном тензоре. Этот тензор должен быть скалярным, то есть размер этого тензора должен быть равен 1. Тип этого тензора должен быть UINT32.

OutputCoordinatesTensor

Тип: const DML_TENSOR_DESC*

Выходной тензор, содержащий N-мерные координаты входных элементов, которые не равны нулю.

Этот тензор должен иметь значения Sizes{1,1,M,N} (если DimensionCount равно 4) или {1,1,1,M,N} (если DimensionCount равно 5), где M — общее количество элементов в InputTensor, а N больше или равно действующему рангуInputTensor вплоть до DimensionCount входных данных.

Эффективный ранг тензора определяется dimensionCount этого тензора, исключая ведущие измерения размера 1. Например, тензор с размерами {1,2,3,4} имеет эффективный ранг 3, как и тензор с размерами {1,1,5,5,5}. Тензор с размерами {1,1,1,1} имеет эффективный ранг 0.

Рассмотрим inputTensor с размерами{1,1,12,5}. Этот входной тензор содержит 60 элементов и имеет эффективный ранг 2. В этом примере все допустимые размеры OutputCoordinatesTensor имеют вид {1,1,60,N}, где N >= 2, но не больше DimensionCount (в этом примере 4).

Координаты, записанные в этот тензор, гарантированно упорядочены по возрастанию индекса элемента. Например, если входной тензор имеет 3 ненулевых значения в координатах , и , значения, записанные в OutputCoordinatesTensor, будут иметь вид [[0,5], [1,0], [1,2]].{0,5}{1,2}{1,0}

Хотя для этого тензора требуется, чтобы его измерение M равнялось количеству элементов во входном тензоре, этот оператор записывает в этот тензор только максимум элементов OutputCount. OutputCount возвращается через скалярный OutputCountTensor.

Примечание

Остальные элементы этого тензора за пределами OutputCount не определены после завершения этого оператора. Не следует полагаться на значения этих элементов.

Пример

InputTensor: (Sizes:{1,1,2,4}, DataType:FLOAT32)
[[1.0f,  0.0f, 0.0f,  2.0f],
 [-0.0f, 3.5f, 0.0f, -5.2f]]

OutputCountTensor: (Sizes:{1,1,1,1}, DataType:UINT32)
[4]

OutputCoordinatesTensor: (Sizes:{1,1,8,3}, DataType:UINT32)
[[0, 0, 0],
 [0, 0, 3],
 [0, 1, 1],
 [0, 1, 3],
 [0, 0, 0], // 
 [0, 0, 0], // Values in rows >= OutputCountTensor (4 in
 [0, 0, 0], // this case) are left undefined
 [0, 0, 0]] // 

Комментарии

Доступность

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

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

DML_FEATURE_LEVEL_4_0 и выше

Тензор Kind Измерения Поддерживаемые счетчики измерений Поддерживаемые типы данных
InputTensor Входные данные { [D0], [D1], [D2], [D3], [D4], [D5], [D6], D7 } От 1 до 8 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8
OutputCountTensor Выходные данные { [1], [1], [1], [1], [1], [1], [1], 1 } От 1 до 8 UINT32
OutputCoordinatesTensor Выходные данные { [1], [1], [1], [1], [1], [1], M, N } От 2 до 8 UINT32

DML_FEATURE_LEVEL_3_0 и выше

Тензор Kind Измерения Поддерживаемые счетчики измерений Поддерживаемые типы данных
InputTensor Входные данные { [D0], D1, D2, D3, D4 } От 4 до 5 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8
OutputCountTensor Выходные данные { [1], 1, 1, 1, 1 } От 4 до 5 UINT32
OutputCoordinatesTensor Выходные данные { [1], 1, 1, M, N } От 4 до 5 UINT32

Требования

Требование Значение
Минимальная версия клиента сборка Windows 10 20348
Минимальная версия сервера сборка Windows 10 20348
Верхняя часть directml.h