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


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

Раздувает входной тензор с константой или зеркальными значениями по краям и записывает результат в выходные данные.

Синтаксис

struct DML_PADDING_OPERATOR_DESC {
  const DML_TENSOR_DESC *InputTensor;
  const DML_TENSOR_DESC *OutputTensor;
  DML_PADDING_MODE      PaddingMode;
  FLOAT                 PaddingValue;
  UINT                  DimensionCount;
  const UINT            *StartPadding;
  const UINT            *EndPadding;
};

Члены

InputTensor

Тип: const DML_TENSOR_DESC*

Тензор, содержащий входные данные.

OutputTensor

Тип: const DML_TENSOR_DESC*

Тензор, содержащий выходные данные. Для каждого измерения iOutputTensor.Sizes[i] = InputTensor.Sizes[i] + StartPadding[i] + EndPadding[i].

PaddingMode

Тип: DML_PADDING_MODE

Режим заполнения, используемый при заполнении областей заполнения.

  • DML_PADDING_MODE_CONSTANT. Использует одно постоянное значение, определенное PaddingValue для всех значений заполнения (см . пример 1).
  • DML_PADDING_MODE_EDGE. Для каждого измерения используйте значения ребер этого измерения для всех значений заполнения (см . пример 2).
  • DML_PADDING_MODE_REFLECTION. Зеркальное отображение значений тензора так, как если бы мы сложили его прямо по краям, что означает, что ребра не зеркально. Обратите внимание, что StartPadding[i] >= InputTensor.Sizes[i]допустимы и EndPadding[i] >= InputTensor.Sizes[i] , а это означает, что мы можем периодически зеркало новые области заполнения, сложив их поверх предыдущих областей заполнения (см. пример 3).
  • DML_PADDING_MODE_SYMMETRIC. Аналогично DML_PADDING_MODE_REFLECTION, но ребра также зеркально. Обратите внимание, что StartPadding[i] > InputTensor.Sizes[i]допустимы и EndPadding[i] > InputTensor.Sizes[i] , что означает, что мы можем периодически зеркало новые области заполнения путем их свертывания по сравнению с предыдущими областями заполнения (см. пример 4). Этот режим появился на уровне DML_FEATURE_LEVEL_3_0компонентов .

PaddingValue

Тип: FLOAT

Значение заполнения, используемое при PaddingMode == DML_PADDING_MODE_CONSTANT. Это значение игнорируется для других режимов заполнения. Обратите внимание, что если DataType тензоров не DML_TENSOR_DATA_TYPE_FLOAT16 или не DML_TENSOR_DATA_TYPE_FLOAT32, то значение может быть усечено (например, 10,6 станет 10).

DimensionCount

Тип: UINT

Размер массивов, на которые указывают StartPadding и EndPadding. Это значение должно совпадать с числом измерений InputTensor и OutputTensor.

StartPadding

Тип: _Field_size_(DimensionCount) const UINT*

Размеры областей заполнения, добавляемых в начале каждого измерения. Для каждого измерения iStartPadding[i] = OutputTensor.Sizes[i] - InputTensor.Sizes[i] - EndPadding[i].

EndPadding

Тип: _Field_size_(DimensionCount) const UINT*

Размеры областей заполнения, добавляемых в конце каждого измерения. Для каждого измерения iEndPadding[i] = OutputTensor.Sizes[i] - InputTensor.Sizes[i] - StartPadding[i].

Примеры

Пример 1

PaddingMode: DML_PADDING_MODE_CONSTANT
PaddingValue: 9
StartPadding: {0, 0, 1, 2}
EndPadding: {0, 0, 3, 4}

InputTensor: (Sizes:{1, 1, 4, 4}, DataType:FLOAT32)
[[[[1, 2, 3, 4],
   [5, 6, 7, 8],
   [1, 2, 3, 4],
   [5, 6, 7, 8]]]]

OutputTensor: (Sizes:{1, 1, 8, 10}, DataType:FLOAT32)
[[[[9, 9, 9, 9, 9, 9, 9, 9, 9, 9]
   [9, 9, 1, 2, 3, 4, 9, 9, 9, 9],
   [9, 9, 5, 6, 7, 8, 9, 9, 9, 9],
   [9, 9, 1, 2, 3, 4, 9, 9, 9, 9],
   [9, 9, 5, 6, 7, 8, 9, 9, 9, 9],
   [9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
   [9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
   [9, 9, 9, 9, 9, 9, 9, 9, 9, 9]]]]

Пример 2

PaddingMode: DML_PADDING_MODE_EDGE
StartPadding: {0, 0, 1, 2}
EndPadding: {0, 0, 3, 4}

InputTensor: (Sizes:{1, 1, 4, 4}, DataType:FLOAT32)
[[[[1, 2, 3, 4],
   [5, 6, 7, 8],
   [1, 2, 3, 4],
   [5, 6, 7, 8]]]]

OutputTensor: (Sizes:{1, 1, 8, 10}, DataType:FLOAT32)
[[[[1, 1, 1, 2, 3, 4, 4, 4, 4, 4]
   [1, 1, 1, 2, 3, 4, 4, 4, 4, 4],
   [5, 5, 5, 6, 7, 8, 8, 8, 8, 8],
   [1, 1, 1, 2, 3, 4, 4, 4, 4, 4],
   [5, 5, 5, 6, 7, 8, 8, 8, 8, 8],
   [5, 5, 5, 6, 7, 8, 8, 8, 8, 8],
   [5, 5, 5, 6, 7, 8, 8, 8, 8, 8],
   [5, 5, 5, 6, 7, 8, 8, 8, 8, 8]]]]

Пример 3

PaddingMode: DML_PADDING_MODE_REFLECTION
StartPadding: {0, 0, 1, 2}
EndPadding: {0, 0, 3, 4}

InputTensor: (Sizes:{1, 1, 4, 4}, DataType:FLOAT32)
[[[[1, 2, 3, 4],
   [5, 6, 7, 8],
   [1, 2, 3, 4],
   [5, 6, 7, 8]]]]

OutputTensor: (Sizes:{1, 1, 8, 10}, DataType:FLOAT32)
[[[[7, 6, 5, 6, 7, 8, 7, 6, 5, 6]
   [3, 2, 1, 2, 3, 4, 3, 2, 1, 2],
   [7, 6, 5, 6, 7, 8, 7, 6, 5, 6],
   [3, 2, 1, 2, 3, 4, 3, 2, 1, 2],
   [7, 6, 5, 6, 7, 8, 7, 6, 5, 6],
   [3, 2, 1, 2, 3, 4, 3, 2, 1, 2],
   [7, 6, 5, 6, 7, 8, 7, 6, 5, 6],
   [3, 2, 1, 2, 3, 4, 3, 2, 1, 2]]]]

Пример 4 (начиная с DML_FEATURE_LEVEL_3_0)

PaddingMode: DML_PADDING_MODE_SYMMETRIC
StartPadding: {0, 0, 1, 2}
EndPadding: {0, 0, 3, 4}

InputTensor: (Sizes:{1, 1, 4, 4}, DataType:FLOAT32)
[[[[1, 2, 3, 4],
   [5, 6, 7, 8],
   [1, 2, 3, 4],
   [5, 6, 7, 8]]]]

OutputTensor: (Sizes:{1, 1, 8, 10}, DataType:FLOAT32)
[[[[2, 1, 1, 2, 3, 4, 4, 3, 2, 1]
   [2, 1, 1, 2, 3, 4, 4, 3, 2, 1],
   [6, 5, 5, 6, 7, 8, 8, 7, 6, 5],
   [2, 1, 1, 2, 3, 4, 4, 3, 2, 1],
   [6, 5, 5, 6, 7, 8, 8, 7, 6, 5],
   [6, 5, 5, 6, 7, 8, 8, 7, 6, 5],
   [2, 1, 1, 2, 3, 4, 4, 3, 2, 1],
   [6, 5, 5, 6, 7, 8, 8, 7, 6, 5]]]]

Доступность

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

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

InputTensor и OutputTensor должны иметь одинаковые значения DataType и DimensionCount.

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

DML_FEATURE_LEVEL_5_0 и выше

Тензор Kind Поддерживаемые счетчики измерений Поддерживаемые типы данных
InputTensor Входные данные От 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_1 и выше

Тензор Kind Поддерживаемые счетчики измерений Поддерживаемые типы данных
InputTensor Входные данные От 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 Поддерживаемые счетчики измерений Поддерживаемые типы данных
InputTensor Входные данные от 4 до 5 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8
OutputTensor Выходные данные от 4 до 5 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8

DML_FEATURE_LEVEL_1_0 и выше

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

Требования

   
Верхняя часть directml.h