структура 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*
Тензор, содержащий выходные данные. Для каждого измерения i
— OutputTensor.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*
Размеры областей заполнения, добавляемых в начале каждого измерения. Для каждого измерения i
— StartPadding[i] = OutputTensor.Sizes[i] - InputTensor.Sizes[i] - EndPadding[i]
.
EndPadding
Тип: _Field_size_(DimensionCount) const UINT*
Размеры областей заполнения, добавляемых в конце каждого измерения. Для каждого измерения i
— EndPadding[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 |