DML_BATCH_NORMALIZATION_TRAINING_GRAD_OPERATOR_DESC 構造体 (directml.h)

バッチ正規化トレーニングのバックプロパティ グラデーションを計算します。

この演算子は複数の計算を実行します。詳細については、個別の出力の説明を参照してください。

MeanTensorVarianceTensorScaleTensor のディメンションは 1 に設定でき、InputTensor と一致するように自動的にブロードキャストできますが、それ以外の場合は InputTensor の対応するディメンションのサイズと等しい必要があります。

OutputScaleGradientTensorOutputBiasGradientTensor は、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*

入力データを含むテンソル。 これは通常、前方パスでDML_BATCH_NORMALIZATION_TRAINING_OPERATOR_DESCする InputTensor と同じテンソルです。

InputGradientTensor

型: const DML_TENSOR_DESC*

入力されるグラデーションテンソル。 これは通常、前のレイヤーのバックプロパティの出力から取得されます。

MeanTensor

型: const DML_TENSOR_DESC*

平均データを含むテンソル。 これは通常、前方パスのDML_BATCH_NORMALIZATION_TRAINING_OPERATOR_DESCから MeanTensor によって返されたのと同じテンソルです。

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

ゼロを回避するために分散に追加された小さな float 値。

解説

可用性

この演算子は、 で DML_FEATURE_LEVEL_4_1導入されました。

テンソル制約

  • InputGradientTensorInputTensorMeanTensorOutputBiasGradientTensorOutputGradientTensorOutputScaleGradientTensorScaleTensorVarianceTensor は、 同じ DataTypeDimensionCount である必要があります。
  • MeanTensorOutputBiasGradientTensorOutputScaleGradientTensorScaleTensorVarianceTensorサイズは同じである必要があります。
  • InputGradientTensorInputTensorおよび OutputGradientTensorサイズは同じである必要があります。

Tensor のサポート

DML_FEATURE_LEVEL_4_1以降

テンソル 種類 Dimensions サポートされているディメンション数 サポートされるデータ型
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