структура DML_BATCH_NORMALIZATION_TRAINING_GRAD_OPERATOR_DESC (directml.h)
Вычисляет градиенты обратного распространения для обучения пакетной нормализации.
Этот оператор выполняет несколько вычислений, которые подробно описаны в отдельных описаниях выходных данных.
Любое измерение в MeanTensor, VarianceTensor и ScaleTensor может иметь значение 1 и автоматически транслироваться в соответствии с InputTensor, но в противном случае должно быть равно размеру соответствующего измерения из InputTensor.
OutputScaleGradientTensor и OutputBiasGradientTensor вычисляются с помощью сумм в наборе измерений, для которых размеры MeanTensor, ScaleTensor и VarianceTensor равны единице.
Синтаксис
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*
Тензор, содержащий данные дисперсии. Обычно это тот же тензор, который был возвращен как OutputVarianceTensor из DML_BATCH_NORMALIZATION_TRAINING_OPERATOR_DESC в прямом проходе.
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 и выше
Тензор | Kind | Измерения | Поддерживаемые счетчики измерений | Поддерживаемые типы данных |
---|---|---|---|---|
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 |