DML_CONVOLUTION_OPERATOR_DESC结构 (directml.h)

使用 InputTensor 执行 FilterTensor 的卷积。 此运算符支持许多标准卷积配置。 这些标准配置包括通过设置 “方向 ”和“ 模式 ”字段 (转置) 卷积,以及通过设置 GroupCount 字段进行深度卷积。

涉及的步骤摘要:将卷积执行到输出张量中;将偏差重塑为与输出张量相同的维度大小;将整形偏置张量添加到输出张量。

语法

struct DML_CONVOLUTION_OPERATOR_DESC {
  const DML_TENSOR_DESC     *InputTensor;
  const DML_TENSOR_DESC     *FilterTensor;
  const DML_TENSOR_DESC     *BiasTensor;
  const DML_TENSOR_DESC     *OutputTensor;
  DML_CONVOLUTION_MODE      Mode;
  DML_CONVOLUTION_DIRECTION Direction;
  UINT                      DimensionCount;
  const UINT                *Strides;
  const UINT                *Dilations;
  const UINT                *StartPadding;
  const UINT                *EndPadding;
  const UINT                *OutputPadding;
  UINT                      GroupCount;
  const DML_OPERATOR_DESC   *FusedActivation;
};

成员

InputTensor

类型: const DML_TENSOR_DESC*

包含输入数据的张量。 InputTensor 的预期维度为:

  • { BatchCount, InputChannelCount, InputWidth } 对于 3D,
  • { BatchCount, InputChannelCount, InputHeight, InputWidth } 对于 4D,和
  • { BatchCount, InputChannelCount, InputDepth, InputHeight, InputWidth } 用于 5D。

FilterTensor

类型: const DML_TENSOR_DESC*

包含筛选器数据的张量。 FilterTensor 的预期维度为:

  • { FilterBatchCount, FilterChannelCount, FilterWidth } 对于 3D,
  • { FilterBatchCount, FilterChannelCount, FilterHeight, FilterWidth } 对于 4D,和
  • { FilterBatchCount, FilterChannelCount, FilterDepth, FilterHeight, FilterWidth } 用于 5D。

BiasTensor

类型:_Maybenull_ const DML_TENSOR_DESC*

包含偏差数据的可选张量。 偏置张量是一个张量,其中包含在卷积结束时通过输出张量广播的数据,该卷积将添加到结果中。 BiasTensor 的预期维度为:

  • { 1, OutputChannelCount, 1 } 对于 3D,
  • { 1, OutputChannelCount, 1, 1 } 对于 4D,和
  • { 1, OutputChannelCount, 1, 1, 1 } 用于 5D。

对于每个输出通道,该通道的单个偏差值将添加到 OutputTensor 的该通道中的每个元素中。 也就是说, BiasTensor 广播为 OutputTensor 的大小,运算符返回的是此广播的 BiasTensor 与卷积的结果的总和。

OutputTensor

类型: const DML_TENSOR_DESC*

要写入结果的张量。 OutputTensor 的预期维度为:

  • { BatchCount, OutputChannelCount, OutputWidth } 对于 3D,
  • { BatchCount, OutputChannelCount, OutputHeight, OutputWidth } 对于 4D,和
  • { BatchCount, OutputChannelCount, OutputDepth, OutputHeight, OutputWidth } 用于 5D。

Mode

类型: DML_CONVOLUTION_MODE

要用于卷积操作的模式。 DML_CONVOLUTION_MODE_CROSS_CORRELATION 是典型推理方案所需的行为。 相比之下, DML_CONVOLUTION_MODE_CONVOLUTION 在每个空间维度上翻转每个筛选器内核中的元素顺序。

Direction

类型: DML_CONVOLUTION_DIRECTION

卷积运算的方向。 DML_CONVOLUTION_DIRECTION_FORWARD 是用于推理的主要卷积形式,在训练期间使用 DML_CONVOLUTION_DIRECTION_FORWARDDML_CONVOLUTION_DIRECTION_BACKWARD 的组合。

DimensionCount

类型: UINT

卷积运算的空间维度数。 空间维度是卷积 FilterTensor 的较低维度。 例如,宽度和高度维度是 4D 卷积筛选器张量的空间维度。 此值还确定 StridesDilationsStartPaddingEndPaddingOutputPadding 数组的大小。 当 InputTensor.DimensionCount 为 4 时,它应设置为 2,当 InputTensor.DimensionCount 为 5 时应设置为 3。

Strides

类型:_Field_size_ (DimensionCount) const UINT*

包含卷积操作的步幅的数组。 这些步幅应用于卷积筛选器。 它们独立于 DML_TENSOR_DESC中包含的张量步幅。

Dilations

类型:_Field_size_ (DimensionCount) const UINT*

包含卷积运算的扩展的数组。 分割是应用于筛选器内核元素的步幅。 这可以通过用零填充内部筛选器内核元素来模拟更大的筛选器内核。

StartPadding

类型:_Field_size_ (DimensionCount) const UINT*

一个数组,其中包含要应用于筛选器的每个空间维度的开头的填充值,以及卷积运算的输入张量。 起始填充值根据 “方向 ”字段进行解释。

EndPadding

类型:_Field_size_ (DimensionCount) const UINT*

一个数组,其中包含要应用于卷积运算的筛选器和输入张量的每个空间维度末尾的填充值。 根据 Direction 字段解释结束填充值。

OutputPadding

类型:_Field_size_ (DimensionCount) const UINT*

包含卷积操作的输出填充的数组。 OutputPadding 对卷积的结果应用零填充。 此填充应用于输出张量的每个空间维度的末尾。

GroupCount

类型: UINT

将卷积运算划分为的组数。 这可以通过将 GroupCount 设置为等于输入通道计数和 方向 设置为 DML_CONVOLUTION_DIRECTION_FORWARD来实现深度卷积。 这将每个输入通道将卷积划分为单独的卷积。

FusedActivation

类型:_Maybenull_ const DML_OPERATOR_DESC*

卷积后应用的可选融合激活层。 有关详细信息,请参阅 使用融合运算符提高性能

模式交互

卷积模式 卷积方向 筛选器方向
DML_CONVOLUTION_MODE_CROSS_CORRELATION DML_CONVOLUTION_DIRECTION_FORWARD 筛选器具有标识方向
DML_CONVOLUTION_MODE_CROSS_CORRELATION DML_CONVOLUTION_DIRECTION_BACKWARD 筛选器沿 x,y 轴转置
DML_CONVOLUTION_MODE_CONVOLUTION DML_CONVOLUTION_DIRECTION_FORWARD 筛选器沿 x,y 轴转置
DML_CONVOLUTION_MODE_CONVOLUTION DML_CONVOLUTION_DIRECTION_BACKWARD 筛选器具有标识方向

可用性

此运算符是在 中 DML_FEATURE_LEVEL_1_0引入的。

张量约束

BiasTensorFilterTensorInputTensorOutputTensor 必须具有相同的 DataTypeDimensionCount

张量支持

DML_FEATURE_LEVEL_4_0 及更高版本

种类 维度 支持的维度计数 支持的数据类型
InputTensor 输入 { BatchCount, InputChannelCount, [InputDepth], [InputHeight], InputWidth } 3 到 5 FLOAT32、FLOAT16
FilterTensor 输入 { FilterBatchCount, FilterChannelCount, [FilterDepth], [FilterHeight], FilterWidth } 3 到 5 FLOAT32、FLOAT16
BiasTensor 可选输入 { 1, OutputChannelCount, [1], [1], 1 } 3 到 5 FLOAT32、FLOAT16
OutputTensor 输出 { BatchCount, OutputChannelCount, [OutputDepth], [OutputHeight], OutputWidth } 3 到 5 FLOAT32、FLOAT16

DML_FEATURE_LEVEL_1_0 及更高版本

种类 维度 支持的维度计数 支持的数据类型
InputTensor 输入 { BatchCount, InputChannelCount, [InputDepth], InputHeight, InputWidth } 4 到 5 FLOAT32、FLOAT16
FilterTensor 输入 { FilterBatchCount, FilterChannelCount, [FilterDepth], FilterHeight, FilterWidth } 4 到 5 FLOAT32、FLOAT16
BiasTensor 可选输入 { 1, OutputChannelCount, [1], 1, 1 } 4 到 5 FLOAT32、FLOAT16
OutputTensor 输出 { BatchCount, OutputChannelCount, [OutputDepth], OutputHeight, OutputWidth } 4 到 5 FLOAT32、FLOAT16

要求

要求
Header directml.h

另请参阅