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


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

Создает тензор, заполненный однократно закодированными значениями. Этот оператор создает выходной тензор, в котором для всех последовательностей в выбранной оси все, кроме одного элемента в этой последовательности, задается значение OffValue, а оставшийся один элемент — OnValue. Последовательность относится к одному из наборов элементов, которые существуют вдоль измерения ОсиOutputTensor.

Расположение OnValue для каждой последовательности и выбор OnValue/OffValue определяются значениями IndicesTensor и ValuesTensor соответственно.

Синтаксис

struct DML_ONE_HOT_OPERATOR_DESC {
  const DML_TENSOR_DESC *IndicesTensor;
  const DML_TENSOR_DESC *ValuesTensor;
  const DML_TENSOR_DESC *OutputTensor;
  UINT                  Axis;
};

Члены

IndicesTensor

Тип: const DML_TENSOR_DESC*

Тензор, содержащий индекс в элементах OnValue для каждой последовательности вдоль оси. Индексы измеряются относительно начала последовательности (в отличие от начала тензора). Например, индекс 0 всегда ссылается на первый элемент для всех последовательностей на оси.

Если значение индекса для последовательности превышает количество элементов вдоль измерения Оси в OutputTensor, то это значение индекса игнорируется, и все элементы в этой последовательности будут иметь значение OffValue.

Начиная с DML_FEATURE_LEVEL_3_0, этот оператор поддерживает отрицательные значения индекса при использовании целочисленного типа со знаком с этим тензором. Отрицательные индексы интерпретируются как относящиеся к концу последовательности. Например, индекс -1 ссылается на последний элемент последовательности.

Этот тензор должен иметь размерность и размеры, равные OutputTensor, за исключением измерения, указанного параметром Axis . Размер измерения оси должен быть равным 1. Например, если outputTensor имеет размеры {2,3,4,5} , а Ось — 1, то размер элемента IndicesTensor должен быть {2,1,4,5}равен .

ValuesTensor

Тип: const DML_TENSOR_DESC*

Этот тензор может иметь любой размер, если он содержит по крайней мере два элемента. 0-й элемент этого тензора интерпретируется как OffValue, а первый элемент в самом быстро меняющемся измерении размера >1 интерпретируется как OnValue.

OutputTensor

Тип: const DML_TENSOR_DESC*

Выходной тензор для записи результатов. Этот тензор должен иметь число измерений и размеры, равные свойству IndicesTensor, за исключением измерения, указанного параметром Axis . Размер измерения оси в этом тензоре может иметь любое значение больше 0.

Axis

Тип: UINT

Индекс измерения для создания однократных закодированных последовательностей. Это значение должно быть меньше значения DimensionCount элемента IndicesTensor.

Примеры

Пример 1

IndicesTensor: (Sizes:{1,1,3,1}, DataType:UINT32)
[[[[0],
   [3],
   [2]]]]
   
ValuesTensor: (Sizes:{1,1,1,2}, DataType:FLOAT32)
[[[[0, 1]]]]

Axis: 3

OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[1, 0, 0, 0],    // The one-hot encoding is formed across the rows
   [0, 0, 0, 1],
   [0, 0, 1, 0]]]]

Пример 2. Использование другой оси

IndicesTensor: (Sizes:{1,1,1,4}, DataType:UINT32)
[[[[0, 2, 1, 0]]]]
   
ValuesTensor: (Sizes:{1,1,1,2}, DataType:FLOAT32)
[[[[0, 1]]]]

Axis: 2

OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[1, 0, 0, 1],    // The one-hot encoding is formed across the columns
   [0, 0, 1, 0],
   [0, 1, 0, 0]]]]

Пример 3. Использование различных значений включения и выключения

IndicesTensor: (Sizes:{1,1,3,1}, DataType:UINT32)
[[[[0],
   [3],
   [2]]]]
   
ValuesTensor: (Sizes:{1,1,3,1}, DataType:FLOAT32)
[[[[4],    // off value
   [2],    // on value
   [9]]]] // unused

Axis: 3

OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[2, 4, 4, 4],
   [4, 4, 4, 2],
   [4, 4, 2, 4]]]]

Пример 4. Отрицательные и внеграничные индексы

IndicesTensor: (Sizes:{1,1,3,1}, DataType:INT32)
[[[[ -3],
   [100],
   [  3]]]]
   
ValuesTensor: (Sizes:{1,1,1,2}, DataType:FLOAT32)
[[[[0, 1]]]]

Axis: 3

OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[0, 1, 0, 0],    // negative indices count from the end
   [0, 0, 0, 0],    // out-of-bounds indices are ignored; all elements are set to OffValue
   [0, 0, 0, 1]]]]

Комментарии

Доступность

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

Ограничения тензоров

  • В элементах IndicesTensor, OutputTensor и ValuesTensor должны быть одинаковые значения DimensionCount.
  • OutputTensor и ValuesTensor должны иметь один и тот же тип DataType.

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

DML_FEATURE_LEVEL_4_1 и выше

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

DML_FEATURE_LEVEL_3_0 и выше

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

DML_FEATURE_LEVEL_2_1 и выше

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

DML_FEATURE_LEVEL_2_0 и выше

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

Требования

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