DML_BATCH_NORMALIZATION_TRAINING_GRAD_OPERATOR_DESC 構造体 (directml.h)
バッチ正規化トレーニングのバックプロパティ グラデーションを計算します。
この演算子は複数の計算を実行します。詳細については、個別の出力の説明を参照してください。
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*
入力データを含むテンソル。 これは通常、前方パスで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
導入されました。
テンソル制約
- InputGradientTensor、 InputTensor、 MeanTensor、 OutputBiasGradientTensor、 OutputGradientTensor、 OutputScaleGradientTensor、 ScaleTensor、 VarianceTensor は、 同じ DataType と DimensionCount である必要があります。
- MeanTensor、 OutputBiasGradientTensor、 OutputScaleGradientTensor、 ScaleTensor、 VarianceTensor の サイズは同じである必要があります。
- InputGradientTensor、 InputTensor、 および 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 |