structure DML_BATCH_NORMALIZATION_TRAINING_GRAD_OPERATOR_DESC (directml.h)
Calcule les gradients de backpropagation pour l’apprentissage de la normalisation par lots.
Cet opérateur effectue plusieurs calculs, qui sont détaillés dans les descriptions de sortie distinctes.
Toute dimension dans MeanTensor, VarianceTensor et ScaleTensor peut être définie sur 1 et être automatiquement diffusée pour correspondre à InputTensor, mais dans le cas contraire, elle doit égaler la taille de la dimension correspondante à partir d’InputTensor.
OutputScaleGradientTensor et OutputBiasGradientTensor sont calculés à l’aide de sommes sur l’ensemble de dimensions pour lesquelles les tailles MeanTensor, ScaleTensor et VarianceTensor sont égales à une.
Syntaxe
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;
};
Membres
InputTensor
Type : const DML_TENSOR_DESC*
Tenseur contenant les données d’entrée. Il s’agit généralement du même tenseur que celui fourni comme inputTensor pour DML_BATCH_NORMALIZATION_TRAINING_OPERATOR_DESC dans la passe avant.
InputGradientTensor
Type : const DML_TENSOR_DESC*
Tenseur de dégradé entrant. Cela est généralement obtenu à partir de la sortie de backpropagation d’une couche précédente.
MeanTensor
Type : const DML_TENSOR_DESC*
Tenseur contenant les données moyennes. Il s’agit généralement du même tenseur que celui retourné par MeanTensor à partir de DML_BATCH_NORMALIZATION_TRAINING_OPERATOR_DESC dans la passe avant.
VarianceTensor
Type : const DML_TENSOR_DESC*
Tenseur contenant les données de variance. Il s’agit généralement du même tenseur qui a été retourné que le OutputVarianceTensor de DML_BATCH_NORMALIZATION_TRAINING_OPERATOR_DESC dans la passe avant.
ScaleTensor
Type : const DML_TENSOR_DESC*
Tenseur contenant les données de mise à l’échelle.
OutputGradientTensor
Type : const DML_TENSOR_DESC*
Pour chaque valeur correspondante dans les entrées :
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
Type : const DML_TENSOR_DESC*
Le calcul suivant est effectué ou chaque valeur correspondante dans les entrées : OutputScaleGradient = sum(InputGradient * (Input - Mean) / sqrt(Variance + Epsilon))
OutputBiasGradientTensor
Type : const DML_TENSOR_DESC*
Le calcul suivant est effectué ou chaque valeur correspondante dans les entrées : OutputBiasGradient = sum(InputGradient)
Epsilon
Type : FLOAT
Petite valeur float ajoutée à la variance pour éviter zéro.
Remarques
Disponibilité
Cet opérateur a été introduit dans DML_FEATURE_LEVEL_4_1
.
Contraintes tensoriels
- InputGradientTensor, InputTensor, MeanTensor, OutputBiasGradientTensor, OutputGradientTensor, OutputScaleGradientTensor, ScaleTensor et VarianceTensor doivent avoir les mêmes DataType et DimensionCount.
- MeanTensor, OutputBiasGradientTensor, OutputScaleGradientTensor, ScaleTensor et VarianceTensor doivent avoir les mêmes tailles.
- InputGradientTensor, InputTensor et OutputGradientTensor doivent avoir les mêmes tailles.
Prise en charge de Tensor
DML_FEATURE_LEVEL_4_1 et versions ultérieures
Tenseur | Type | Dimensions | Nombre de dimensions pris en charge | Types de données pris en charge |
---|---|---|---|---|
InputTensor | Entrée | { InputDimensions[] } | 1 à 8 | FLOAT32, FLOAT16 |
InputGradientTensor | Entrée | { InputDimensions[] } | 1 à 8 | FLOAT32, FLOAT16 |
MeanTensor | Entrée | { MeanDimensions[] } | 1 à 8 | FLOAT32, FLOAT16 |
VarianceTensor | Entrée | { MeanDimensions[] } | 1 à 8 | FLOAT32, FLOAT16 |
ScaleTensor | Entrée | { MeanDimensions[] } | 1 à 8 | FLOAT32, FLOAT16 |
OutputGradientTensor | Output | { InputDimensions[] } | 1 à 8 | FLOAT32, FLOAT16 |
OutputScaleGradientTensor | Output | { MeanDimensions[] } | 1 à 8 | FLOAT32, FLOAT16 |
OutputBiasGradientTensor | Output | { MeanDimensions[] } | 1 à 8 | FLOAT32, FLOAT16 |
Configuration requise
En-tête | directml.h |