DML_PADDING1_OPERATOR_DESC结构 (directml.h)

使用边缘上的常量或镜像值放大输入张量,并将结果写入输出。

语法

struct DML_PADDING1_OPERATOR_DESC {
  const DML_TENSOR_DESC *InputTensor;
  const DML_TENSOR_DESC *OutputTensor;
  DML_PADDING_MODE      PaddingMode;
  DML_TENSOR_DATA_TYPE  PaddingValueDataType;
  DML_SCALAR_UNION      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中引入的

PaddingValueDataType

类型: DML_TENSOR_DATA_TYPE

PaddingValue 成员的数据类型,必须与 OutputTensor.DataType 匹配。

PaddingValue

类型: DML_SCALAR_UNION

PaddingMode == DML_PADDING_MODE_CONSTANT要使用的填充值, 其中 PaddingValueDataType 确定如何解释字段。 对于其他填充模式,将忽略此值。

DimensionCount

类型: UINT

StartPaddingEndPadding 指向的数组的大小。 此值必须与 InputTensorOutputTensor 的维度计数相同。

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
PaddingValueDataType: FLOAT32
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
PaddingValueDataType: FLOAT32
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
PaddingValueDataType: FLOAT32
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
PaddingValueDataType: FLOAT32
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_5_0 中引入

张量约束

InputTensorOutputTensor 必须具有相同的 DataTypeDimensionCount

张量支持

种类 支持的维度计数 支持的数据类型
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

要求

要求
Header directml.h