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
要素を乗算するディメンションのインデックス。 この値は、InputTensor の DimensionCount より小さくする必要があります。
AxisDirection
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. 排他的な製品
HasExclusiveProduct を TRUE に設定すると、出力テンソルに書き込むときに、実行中の集計から現在の要素の値を除外する効果があります。
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. 軸の方向
AxisDirection を DML_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
導入されました。
テンソル制約
InputTensor と OutputTensor には、同じ DataType、 DimensionCount、および サイズが必要です。
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 |