DML_CUMULATIVE_PRODUCT_OPERATOR_DESC structure (directml.h)
Multiplie les éléments d’un tenseur le long d’un axe, en écrivant le décompte en cours d’exécution du produit dans le tenseur de sortie.
Syntaxe
struct DML_CUMULATIVE_PRODUCT_OPERATOR_DESC {
const DML_TENSOR_DESC *InputTensor;
const DML_TENSOR_DESC *OutputTensor;
UINT Axis;
DML_AXIS_DIRECTION AxisDirection;
BOOL HasExclusiveProduct;
};
Membres
InputTensor
Type : const DML_TENSOR_DESC*
Tenseur contenant les données d’entrée. Il s’agit généralement du même tenseur que celui fourni en tant que InputTensor pour DML_BATCH_NORMALIZATION_OPERATOR_DESC dans la passe avant.
Tenseur d’entrée contenant les éléments à multiplier.
OutputTensor
Type : const DML_TENSOR_DESC*
Tenseur de sortie dans lequel écrire les produits cumulatifs résultants. Ce tenseur doit avoir les mêmes tailles et le même type de données que InputTensor.
Axis
Type : UINT
Index de la dimension sur laquelle multiplier les éléments. Cette valeur doit être inférieure à dimensionCount du inputTensor.
AxisDirection
Type : DML_AXIS_DIRECTION
Une des valeurs de l’énumération DML_AXIS_DIRECTION . Si la valeur est DML_AXIS_DIRECTION_INCREASING, le produit se produit en parcourant le tenseur le long de l’axe spécifié par l’index d’élément croissant. Si la valeur est DML_AXIS_DIRECTION_DECREASING, l’inverse est true et le produit se produit en parcourant les éléments par index décroissant.
HasExclusiveProduct
Type : BOOL
Si la valeur est TRUE, la valeur de l’élément actuel est exclue lors de l’écriture du tally en cours d’exécution dans le tenseur de sortie. Si la valeur est FALSE, la valeur de l’élément actuel est incluse dans le décompte en cours d’exécution.
Exemples
Les exemples de cette section utilisent tous ce même tenseur d’entrée.
InputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[2, 1, 3, 5],
[3, 8, 7, 3],
[9, 6, 2, 4]]]]
Exemple 1. Produit cumulé sur des éclats horizontaux
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]]]] // [... ]
Exemple 2. Produits exclusifs
La définition de HasExclusiveProduct surTRUE a pour effet d’exclure la valeur de l’élément actuel du décompte en cours d’exécution lors de l’écriture dans le tenseur de sortie.
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]]]]
Exemple 3. Direction de l’axe
La définition d’AxisDirection sur DML_AXIS_DIRECTION_DECREASING a pour effet d’inverser l’ordre de traversée des éléments lors du calcul du décompte en cours d’exécution.
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]]]] // [... ]
Exemple 4. Multiplication le long d’un autre axe
Dans cet exemple, le produit se produit verticalement, le long de l’axe de hauteur (deuxième dimension).
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 ...]
Remarques
Cet opérateur prend en charge l’exécution sur place, ce qui signifie que le tenseur de sortie est autorisé à alias InputTensor pendant la liaison.
Disponibilité
Cet opérateur a été introduit dans DML_FEATURE_LEVEL_3_1
.
Contraintes tensoriels
InputTensor et OutputTensor doivent avoir les mêmes DataType, DimensionCount et Sizes.
Prise en charge des tenseurs
DML_FEATURE_LEVEL_5_0 et versions ultérieures
Tenseur | Genre | Nombre de dimensions pris en charge | Types de données pris en charge |
---|---|---|---|
InputTensor | Entrée | 1 à 8 | FLOAT32, FLOAT16, INT64, INT32, UINT64, UINT32 |
OutputTensor | Sortie | 1 à 8 | FLOAT32, FLOAT16, INT64, INT32, UINT64, UINT32 |
DML_FEATURE_LEVEL_4_0 et versions ultérieures
Tenseur | Genre | Nombre de dimensions pris en charge | Types de données pris en charge |
---|---|---|---|
InputTensor | Entrée | 1 à 8 | FLOAT32, FLOAT16, INT32, UINT32 |
OutputTensor | Sortie | 1 à 8 | FLOAT32, FLOAT16, INT32, UINT32 |
DML_FEATURE_LEVEL_3_1 et versions ultérieures
Tenseur | Genre | Nombre de dimensions pris en charge | Types de données pris en charge |
---|---|---|---|
InputTensor | Entrée | 4 | FLOAT32, FLOAT16, INT32, UINT32 |
OutputTensor | Sortie | 4 | FLOAT32, FLOAT16, INT32, UINT32 |
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows Build 22000 |
Serveur minimal pris en charge | Windows Build 22000 |
En-tête | directml.h |