次の方法で共有


DML_CUMULATIVE_PRODUCT_OPERATOR_DESC 構造体 (directml.h)

軸に沿ってテンソルの要素を乗算し、製品の実行中の集計を出力テンソルに書き込みます。

構文

struct DML_CUMULATIVE_PRODUCT_OPERATOR_DESC {
  const DML_TENSOR_DESC *InputTensor;
  const DML_TENSOR_DESC *OutputTensor;
  UINT                  Axis;
  DML_AXIS_DIRECTION    AxisDirection;
  BOOL                  HasExclusiveProduct;
};

メンバー

InputTensor

型: const DML_TENSOR_DESC*

入力データを含むテンソル。 これは通常、前方パスでDML_BATCH_NORMALIZATION_OPERATOR_DESCするために InputTensor として提供されたのと同じテンソルです。

乗算する要素を含む入力テンソル。

OutputTensor

型: const DML_TENSOR_DESC*

結果の累積積を書き込む出力テンソル。 このテンソルのサイズとデータ型は InputTensor と同じである必要があります。

Axis

型: UINT

要素を乗算するディメンションのインデックス。 この値は、InputTensorDimensionCount より小さくする必要があります。

AxisDirection

種類: DML_AXIS_DIRECTION

DML_AXIS_DIRECTION列挙の値の 1 つ。 DML_AXIS_DIRECTION_INCREASINGに設定すると、指定した軸に沿ってテンソルを走査し、要素インデックスの昇順で積が発生します。 DML_AXIS_DIRECTION_DECREASINGに設定すると、逆は true になり、降順のインデックスによって要素を走査することによって積が発生します。

HasExclusiveProduct

種類: BOOL

TRUE の場合、実行中の集計を出力テンソルに書き込むときに、現在の要素の値が除外されます。 FALSE の場合、現在の要素の値が実行中の集計に含まれます。

このセクションの例では、すべて同じ入力テンソルを使用します。

InputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[2, 1, 3, 5],
   [3, 8, 7, 3],
   [9, 6, 2, 4]]]]

例 1. 水平スライバー間の累積積

Axis: 3
AxisDirection: DML_AXIS_DIRECTION_INCREASING
HasExclusiveProduct: FALSE

OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[2,  2,   6,  30],       // i.e. [2, 2*1, 2*1*3, 2*1*3*5]
   [3, 24, 168, 504],       //      [...                   ]
   [9, 54, 108, 432]]]]     //      [...                   ]

例 2. 排他的な製品

HasExclusiveProductTRUE に設定すると、出力テンソルに書き込むときに、実行中の集計から現在の要素の値を除外する効果があります。

Axis: 3
AxisDirection: DML_AXIS_DIRECTION_INCREASING
HasExclusiveProduct: TRUE

OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[1, 2,  2,   6],      // Notice the product is written before multiplying the input,
   [1, 3, 24, 168],      // and the final total is not written to any output.
   [1, 9, 54, 108]]]]

例 3. 軸の方向

AxisDirectionDML_AXIS_DIRECTION_DECREASING に設定すると、実行中の集計を計算するときに要素のトラバーサル順序が反転します。

Axis: 3
AxisDirection: DML_AXIS_DIRECTION_DECREASING
HasExclusiveProduct: FALSE

OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[ 30,  15, 15, 5],    // i.e. [2*1*3*5, 1*3*5, 3*5, 5]
   [504, 168, 21, 3],    //      [...                   ]
   [432,  48,  8, 4]]]]  //      [...                   ]

例 4. 異なる軸に沿った乗算

この例では、製品は高さ軸 (2 番目のディメンション) に沿って垂直方向に発生します。

Axis: 2
AxisDirection: DML_AXIS_DIRECTION_INCREASING
HasExclusiveProduct: FALSE

OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[ 2,  1,  3,  5],   // i.e. [2,    ...]
   [ 6,  8, 21, 15],   //      [2*3,  ...]
   [54, 48, 42, 60]]]] //      [2*3*9 ...]

注釈

この演算子はインプレース実行をサポートしています。つまり、バインド中に InputTensor のエイリアスを出力テンソルに許可します。

可用性

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

テンソル制約

InputTensorOutputTensor には、同じ DataTypeDimensionCount、および サイズが必要です。

Tensor のサポート

DML_FEATURE_LEVEL_5_0 以降

テンソル 種類 サポートされているディメンション数 サポートされるデータ型
InputTensor 入力 1 から 8 FLOAT32、FLOAT16、INT64、INT32、UINT64、UINT32
OutputTensor 出力 1 から 8 FLOAT32、FLOAT16、INT64、INT32、UINT64、UINT32

DML_FEATURE_LEVEL_4_0以上

テンソル 種類 サポートされているディメンション数 サポートされるデータ型
InputTensor 入力 1 から 8 FLOAT32、FLOAT16、INT32、UINT32
OutputTensor 出力 1 から 8 FLOAT32、FLOAT16、INT32、UINT32

DML_FEATURE_LEVEL_3_1以上

テンソル 種類 サポートされているディメンション数 サポートされるデータ型
InputTensor 入力 4 FLOAT32、FLOAT16、INT32、UINT32
OutputTensor 出力 4 FLOAT32、FLOAT16、INT32、UINT32

要件

要件
サポートされている最小のクライアント Windows ビルド 22000
サポートされている最小のサーバー Windows ビルド 22000
Header directml.h