Partager via


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