DML_CUMULATIVE_PRODUCT_OPERATOR_DESC-Struktur (directml.h)
Multipliziert die Elemente eines Tensors entlang einer Achse und schreibt die laufende Tallye des Produkts in den Ausgabe tensor.
Syntax
struct DML_CUMULATIVE_PRODUCT_OPERATOR_DESC {
const DML_TENSOR_DESC *InputTensor;
const DML_TENSOR_DESC *OutputTensor;
UINT Axis;
DML_AXIS_DIRECTION AxisDirection;
BOOL HasExclusiveProduct;
};
Member
InputTensor
Typ: const DML_TENSOR_DESC*
Ein Tensor, der die Eingabedaten enthält. Dies ist in der Regel derselbe Tensor, der als InputTensor bereitgestellt wurde, um im Vorwärtsdurchlauf DML_BATCH_NORMALIZATION_OPERATOR_DESC .
Der Eingabe-Tensor, der zu multiplizierende Elemente enthält.
OutputTensor
Typ: const DML_TENSOR_DESC*
Der Ausgabe-Tensor, in den die resultierenden kumulativen Produkte geschrieben werden sollen. Dieser Tensor muss die gleiche Größe und denselben Datentyp wie InputTensor aufweisen.
Axis
Typ: UINT
Der Index der Dimension, über die Elemente multipliziert werden sollen. Dieser Wert muss kleiner als der DimensionCount des InputTensor sein.
AxisDirection
Typ: DML_AXIS_DIRECTION
Einer der Werte der DML_AXIS_DIRECTION-Enumeration . Wenn auf DML_AXIS_DIRECTION_INCREASING festgelegt ist, erfolgt das Produkt, indem der Tensor entlang der angegebenen Achse durch den aufsteigenden Elementindex durchlaufen wird. Wenn auf DML_AXIS_DIRECTION_DECREASING festgelegt ist, ist die Umgekehrte true, und das Produkt erfolgt durch Durchlaufen von Elementen durch den absteigenden Index.
HasExclusiveProduct
Typ: BOOL
Bei TRUE wird der Wert des aktuellen Elements ausgeschlossen, wenn die ausgeführte Ally in den Ausgabe tensor geschrieben wird. Wenn FALSE, wird der Wert des aktuellen Elements in die ausgeführte Ally eingeschlossen.
Beispiele
In den Beispielen in diesem Abschnitt wird derselbe Eingabe tensor verwendet.
InputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[2, 1, 3, 5],
[3, 8, 7, 3],
[9, 6, 2, 4]]]]
Beispiel 1: Kumulatives Produkt für horizontale Slivers
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]]]] // [... ]
Beispiel 2: Exklusive Produkte
Wenn HasExclusiveProduct auf TRUE festgelegt wird, wird der Wert des aktuellen Elements beim Schreiben in den Ausgabe tensor von der ausgeführten Ally ausgeschlossen.
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]]]]
Beispiel 3: Achsenrichtung
Das Festlegen von AxisDirection auf DML_AXIS_DIRECTION_DECREASING bewirkt, dass die Durchlaufreihenfolge von Elementen beim Berechnen der Ausgeführten Ally umgekehrt wird.
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]]]] // [... ]
Beispiel 4. Multiplizieren entlang einer anderen Achse
In diesem Beispiel tritt das Produkt vertikal entlang der Höhenachse (zweite Dimension) auf.
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 ...]
Hinweise
Dieser Operator unterstützt die direkte Ausführung, was bedeutet, dass der Ausgabe-Tensor während der Bindung den Alias InputTensor verwenden darf.
Verfügbarkeit
Dieser Operator wurde in DML_FEATURE_LEVEL_3_1
eingeführt.
Tensoreinschränkungen
InputTensor und OutputTensor müssen denselben DataType, DimensionCount und Sizes aufweisen.
Tensorunterstützung
DML_FEATURE_LEVEL_5_0 und höher
Tensor | Variante | Unterstützte Dimensionsanzahl | Unterstützte Datentypen |
---|---|---|---|
InputTensor | Eingabe | 1 bis 8 | FLOAT32, FLOAT16, INT64, INT32, UINT64, UINT32 |
OutputTensor | Ausgabe | 1 bis 8 | FLOAT32, FLOAT16, INT64, INT32, UINT64, UINT32 |
DML_FEATURE_LEVEL_4_0 und höher
Tensor | Variante | Unterstützte Dimensionsanzahl | Unterstützte Datentypen |
---|---|---|---|
InputTensor | Eingabe | 1 bis 8 | FLOAT32, FLOAT16, INT32, UINT32 |
OutputTensor | Ausgabe | 1 bis 8 | FLOAT32, FLOAT16, INT32, UINT32 |
DML_FEATURE_LEVEL_3_1 und höher
Tensor | Variante | Unterstützte Dimensionsanzahl | Unterstützte Datentypen |
---|---|---|---|
InputTensor | Eingabe | 4 | FLOAT32, FLOAT16, INT32, UINT32 |
OutputTensor | Ausgabe | 4 | FLOAT32, FLOAT16, INT32, UINT32 |
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows Build 22000 |
Unterstützte Mindestversion (Server) | Windows Build 22000 |
Kopfzeile | directml.h |