directml.h) (DML_BATCH_NORMALIZATION_TRAINING_GRAD_OPERATOR_DESC 结构
计算 批量规范化训练的反向传播梯度。
此运算符执行多个计算,详见单独的输出说明。
MeanTensor、VarianceTensor 和 ScaleTensor 中的任何维度都可以设置为 1,并自动广播以匹配 InputTensor,但必须与 InputTensor 对应的维度大小相等。
OutputScaleGradientTensor 和 OutputBiasGradientTensor 是使用 MeanTensor、ScaleTensor 和 VarianceTensor 大小等于 1 的维度集的总和计算的。
语法
struct DML_BATCH_NORMALIZATION_TRAINING_GRAD_OPERATOR_DESC {
const DML_TENSOR_DESC *InputTensor;
const DML_TENSOR_DESC *InputGradientTensor;
const DML_TENSOR_DESC *MeanTensor;
const DML_TENSOR_DESC *VarianceTensor;
const DML_TENSOR_DESC *ScaleTensor;
const DML_TENSOR_DESC *OutputGradientTensor;
const DML_TENSOR_DESC *OutputScaleGradientTensor;
const DML_TENSOR_DESC *OutputBiasGradientTensor;
FLOAT Epsilon;
};
成员
InputTensor
类型: const DML_TENSOR_DESC*
包含输入数据的张量。 这通常与 InputTensor 提供的张量相同,用于在前向传递中 DML_BATCH_NORMALIZATION_TRAINING_OPERATOR_DESC 。
InputGradientTensor
类型: const DML_TENSOR_DESC*
传入的渐变张量。 这通常是从上一层的反向传播的输出中获取的。
MeanTensor
类型: const DML_TENSOR_DESC*
包含平均值数据的张量。 这通常与 MeanTensor 在前向传递中 从DML_BATCH_NORMALIZATION_TRAINING_OPERATOR_DESC 返回的张量相同。
VarianceTensor
类型: const DML_TENSOR_DESC*
包含方差数据的张量。 这通常是前向传递中从 DML_BATCH_NORMALIZATION_TRAINING_OPERATOR_DESC 返回的 OutputVarianceTensor 的张量。
ScaleTensor
类型: const DML_TENSOR_DESC*
包含刻度数据的张量。
OutputGradientTensor
类型: const DML_TENSOR_DESC*
对于输入中的每个相应值:
Coef0 = 1.0f / sqrt(Variance + Epsilon)
Coef1 = InputGradient * (Input - mean(Input))
InputGradientCentered = InputGradient - mean(InputGradient)
InputCentered = InputCentered - mean(InputCentered)
OutputGradient = Scale * Coef0 * (InputGradientCentered - InputCentered * mean(Coef1) / (Variance + Epsilon))
OutputScaleGradientTensor
类型: const DML_TENSOR_DESC*
以下计算完成或输入中的每个相应值: OutputScaleGradient = sum(InputGradient * (Input - Mean) / sqrt(Variance + Epsilon))
OutputBiasGradientTensor
类型: const DML_TENSOR_DESC*
以下计算完成或输入中的每个相应值: OutputBiasGradient = sum(InputGradient)
Epsilon
类型: FLOAT
将较小的浮点值添加到方差以避免零。
备注
可用性
此运算符是在 中 DML_FEATURE_LEVEL_4_1
引入的。
张量约束
- InputGradientTensor、 InputTensor、 MeanTensor、 OutputBiasGradientTensor、 OutputGradientTensor、 OutputScaleGradientTensor、 ScaleTensor 和 VarianceTensor 必须具有相同 的 DataType 和 DimensionCount。
- MeanTensor、 OutputBiasGradientTensor、 OutputScaleGradientTensor、 ScaleTensor 和 VarianceTensor 必须具有相同 的大小。
- InputGradientTensor、 InputTensor 和 OutputGradientTensor 必须具有相同 的大小。
张量支持
DML_FEATURE_LEVEL_4_1 及更高版本
张 | 种类 | 维度 | 支持的维度计数 | 支持的数据类型 |
---|---|---|---|---|
InputTensor | 输入 | { InputDimensions[] } | 1 到 8 | FLOAT32、FLOAT16 |
InputGradientTensor | 输入 | { InputDimensions[] } | 1 到 8 | FLOAT32、FLOAT16 |
MeanTensor | 输入 | { MeanDimensions[] } | 1 到 8 | FLOAT32、FLOAT16 |
VarianceTensor | 输入 | { MeanDimensions[] } | 1 到 8 | FLOAT32、FLOAT16 |
ScaleTensor | 输入 | { MeanDimensions[] } | 1 到 8 | FLOAT32、FLOAT16 |
OutputGradientTensor | 输出 | { InputDimensions[] } | 1 到 8 | FLOAT32、FLOAT16 |
OutputScaleGradientTensor | 输出 | { MeanDimensions[] } | 1 到 8 | FLOAT32、FLOAT16 |
OutputBiasGradientTensor | 输出 | { MeanDimensions[] } | 1 到 8 | FLOAT32、FLOAT16 |
要求
标头 | directml.h |