DML_CUMULATIVE_PRODUCT_OPERATOR_DESC結構 (directml.h)
將張量的專案乘以座標軸,將產品的執行中 Tally 寫入輸出張量。
語法
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*
包含輸入數據的張量。 這通常是與 InputTensor 相同的張量,以在轉送中 DML_BATCH_NORMALIZATION_OPERATOR_DESC 。
包含要乘以之項目的輸入張量。
OutputTensor
類型: const DML_TENSOR_DESC*
要寫入結果累積產品的輸出張量。 這個張量的大小和數據類型必須與 InputTensor 相同。
Axis
類型: UINT
要相乘專案之維度的索引。 此值必須小於 InputTensor 的 DimensionCount。
AxisDirection
DML_AXIS_DIRECTION列舉的其中一個值。 如果設定為 DML_AXIS_DIRECTION_INCREASING,則產品會透過遞增元素索引沿著指定的座標軸周游張量來發生。 如果設定為 DML_AXIS_DIRECTION_DECREASING,則反向為 true,而產品會透過遞減索引周遊元素而發生。
HasExclusiveProduct
類型: BOOL
如果 為 TRUE,則當將執行中的 Tally 寫入輸出張量時,會排除目前元素的值。 如果 為 FALSE,則目前元素的值會包含在執行中的 Tally 中。
範例
本節中的範例全都使用相同的輸入張量。
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 的效果,就是在寫入輸出張量時,將目前元素的值從執行中的 Tally 中排除。
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 在計算執行中 Tally 時,會反轉元素周遊順序的效果。
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. 沿著不同的軸相乘
在此範例中,產品會沿著高度軸 (第二個維度) 垂直發生。
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
引進的。
Tensor 條件約束
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 |
標頭 | directml.h |