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_CROSS_CORRELATION 是典型推理方案所需的行为。 相比之下, DML_CONVOLUTION_MODE_CONVOLUTION 在每个空间维度上翻转每个筛选器内核中的元素顺序。
Direction
卷积运算的方向。 DML_CONVOLUTION_DIRECTION_FORWARD 是用于推理的主要卷积形式,在训练期间使用 DML_CONVOLUTION_DIRECTION_FORWARD 和 DML_CONVOLUTION_DIRECTION_BACKWARD 的组合。
DimensionCount
类型: UINT
卷积运算的空间维度数。 空间维度是卷积 FilterTensor 的较低维度。 例如,宽度和高度维度是 4D 卷积筛选器张量的空间维度。 此值还确定 Strides、 Dilations、 StartPadding、 EndPadding 和 OutputPadding 数组的大小。 当 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
引入的。
张量约束
BiasTensor、 FilterTensor、 InputTensor 和 OutputTensor 必须具有相同的 DataType 和 DimensionCount。
张量支持
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 |