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。
Tensor 支持
DML_FEATURE_LEVEL_5_0及更高版本
张 | 种类 | 支持的维度计数 | 支持的数据类型 |
---|---|---|---|
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及更高版本
张 | 种类 | 支持的维度计数 | 支持的数据类型 |
---|---|---|---|
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及更高版本
张 | 种类 | 支持的维度计数 | 支持的数据类型 |
---|---|---|---|
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 及更高版本
张 | 种类 | 支持的维度计数 | 支持的数据类型 |
---|---|---|---|
InputTensor | 输入 | 4 到 5 | FLOAT32、FLOAT16 |
OutputTensor | 输出 | 4 到 5 | FLOAT32、FLOAT16 |
要求
标头 | directml.h |