Partager via


DML_JOIN_OPERATOR_DESC structure (directml.h)

Concatène un tableau de tenseurs d’entrée le long d’un axe spécifié.

Les tenseurs d’entrée ne peuvent être joints que si leurs tailles sont identiques dans toutes les dimensions, à l’exception de l’axe de jointure, qui peut contenir une taille autre que zéro. Les tailles de sortie sont égales aux tailles d’entrée, à l’exception de l’axe de jointure, qui est la somme de la taille de l’axe de jointure de toutes les entrées. Ces contraintes sont illustrées dans le pseudocode ci-dessous.

joinSize = 0;

for (i = 0; i < InputCount; i++) {
    assert(inputTensors[i]->DimensionCount == outputTensor->DimensionCount);
    for (dim = 0; dim < outputTensor->DimensionCount; dim++) {
        if (dim == Axis) { joinSize += inputTensors[i]->Sizes[dim]; }
        else { assert(inputTensors[i]->Sizes[dim] == outputTensor->Sizes[dim]); }
    }
}

assert(joinSize == outputTensor->Sizes[Axis]);

La jointure d’un tenseur d’entrée unique produit simplement une copie du tenseur d’entrée.

Cet opérateur est l’inverse de DML_SPLIT_OPERATOR_DESC.

Syntaxe

struct DML_JOIN_OPERATOR_DESC {
  UINT                  InputCount;
  const DML_TENSOR_DESC *InputTensors;
  const DML_TENSOR_DESC *OutputTensor;
  UINT                  Axis;
};

Membres

InputCount

Type : UINT

Ce champ détermine la taille du tableau InputTensors . Cette valeur doit être supérieure à 0.

InputTensors

Type : _Field_size_(InputCount) const DML_TENSOR_DESC*

Tableau contenant les descriptions des tenseurs à joindre dans un tenseur de sortie unique. Tous les tenseurs d’entrée de ce tableau doivent avoir les mêmes tailles, à l’exception de l’axe de jointure, qui peut avoir une valeur différente de zéro.

OutputTensor

Type : const DML_TENSOR_DESC*

Tenseur dans lequel écrire les tenseurs d’entrée joints. Les tailles de sortie doivent avoir les mêmes tailles que tous les tenseurs d’entrée, à l’exception de l’axe de jointure, qui doit être égale à la somme de la taille de l’axe de jointure de toutes les entrées.

Axis

Type : UINT

Index de la dimension des tenseurs d’entrée à joindre. Tous les tenseurs d’entrée et de sortie doivent avoir des tailles identiques dans toutes les dimensions à l’exception de cet axe. Cette valeur doit être dans la plage [0, OutputTensor.DimensionCount - 1].

Exemples

Exemple 1. Jointure de tenseurs avec un seul axe possible

Dans cet exemple, les tenseurs peuvent uniquement être joints le long de la quatrième dimension (axe 3). La jonction d’un autre axe n’est pas possible, car la taille des tenseurs dans la quatrième dimension ne correspond pas.

InputCount: 2
Axis: 3

InputTensors[0]: (Sizes:{1, 1, 2, 3}, DataType:FLOAT32)
[[[[ 1,  2,  3],
   [ 4,  5,  6]]]]

InputTensors[1]: (Sizes:{1, 1, 2, 4}, DataType:FLOAT32)
[[[[ 7,  8,  9, 10],
   [11, 12, 13, 14]]]]

OutputTensor: (Sizes:{1, 1, 2, 7}, DataType:FLOAT32)
[[[[ 1,  2,  3,  7,  8,  9, 10],
   [ 4,  5,  6, 11, 12, 13, 14]]]]

Exemple 2. Jointure de tenseurs avec plusieurs axes possibles :

Les exemples suivants utilisent les mêmes tenseurs d’entrée. Étant donné que toutes les entrées ont la même taille dans toutes les dimensions, elles peuvent être jointes le long de n’importe quelle dimension.

InputCount: 3

InputTensors[0]: (Sizes:{1, 1, 2, 2}, DataType:FLOAT32)
[[[[1, 2],
   [3, 4]]]]

InputTensors[1]: (Sizes:{1, 1, 2, 2}, DataType:FLOAT32)
[[[[5, 6],
   [7, 8]]]]

InputTensors[2]: (Sizes:{1, 1, 2, 2}, DataType:FLOAT32)
[[[[9, 10],
   [11, 12]]]]

Jonction de l’axe 1 :

Axis: 1

OutputTensor: (Sizes:{1, 3, 2, 2}, DataType:FLOAT32)
[[[[1, 2],
   [3, 4]],

  [[5, 6],
   [7, 8]],

  [[9, 10],
   [11, 12]]]]

Jonction de l’axe 2 :

Axis: 2

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

Jonction de l’axe 3 :

Axis: 3

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

Disponibilité

Cet opérateur a été introduit dans DML_FEATURE_LEVEL_1_0.

Contraintes tensoriels

InputTensors et OutputTensor doivent avoir les mêmes DataType et DimensionCount.

Prise en charge des tenseurs

DML_FEATURE_LEVEL_4_1 et versions ultérieures

Tenseur Type Nombre de dimensions pris en charge Types de données pris en charge
InputTensors Tableau d’entrées 1 à 8 FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8
OutputTensor Output 1 à 8 FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8

DML_FEATURE_LEVEL_3_0 et versions ultérieures

Tenseur Type Nombre de dimensions pris en charge Types de données pris en charge
InputTensors Tableau d’entrées 4 à 5 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8
OutputTensor Output 4 à 5 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8

DML_FEATURE_LEVEL_2_1 et versions ultérieures

Tenseur Type Nombre de dimensions pris en charge Types de données pris en charge
InputTensors Tableau d’entrées 4 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8
OutputTensor Output 4 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8

DML_FEATURE_LEVEL_1_0 et versions ultérieures

Tenseur Type Nombre de dimensions pris en charge Types de données pris en charge
InputTensors Tableau d’entrées 4 FLOAT32, FLOAT16, INT32, INT16, UINT32, UINT16
OutputTensor Output 4 FLOAT32, FLOAT16, INT32, INT16, UINT32, UINT16

Spécifications

   
En-tête directml.h