Condividi tramite


struttura DML_JOIN_OPERATOR_DESC (directml.h)

Concatena una matrice di tensori di input lungo un asse specificato.

I tensori di input possono essere aggiunti solo se le dimensioni sono identiche in tutte le dimensioni, ad eccezione dell'asse di join, che può contenere qualsiasi dimensione non zero. Le dimensioni di output sono uguali alle dimensioni di input, ad eccezione dell'asse join, ovvero la somma delle dimensioni dell'asse di join di tutti gli input. Questi vincoli sono illustrati nella pseudocodice seguente.

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]);

L'aggiunta di un singolo tensore di input produce semplicemente una copia del tensore di input.

Questo operatore è l'inverso di DML_SPLIT_OPERATOR_DESC.

Sintassi

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

Members

InputCount

Tipo: UINT

Questo campo determina le dimensioni della matrice InputTensors . Questo valore deve essere maggiore di 0.

InputTensors

Tipo: _Field_size_(InputCount) const DML_TENSOR_DESC*

Matrice contenente le descrizioni dei tensori da unire in un singolo tensore di output. Tutti i tensori di input in questa matrice devono avere le stesse dimensioni, ad eccezione dell'asse join, che può avere qualsiasi valore diverso da zero.

OutputTensor

Tipo: const DML_TENSOR_DESC*

Tensore in cui scrivere i tensori di input aggiunti. Le dimensioni dell'output devono avere le stesse dimensioni di tutti i tensori di input, ad eccezione dell'asse join, che deve essere uguale alla somma delle dimensioni dell'asse di join di tutti gli input.

Axis

Tipo: UINT

Indice della dimensione dei tensori di input da aggiungere. Tutti i tensori di input e output devono avere dimensioni identiche in tutte le dimensioni, ad eccezione di questo asse. Questo valore deve trovarsi nell'intervallo [0, OutputTensor.DimensionCount - 1].

Esempi

Esempio 1. Aggiunta di tensori con un solo asse possibile

In questo esempio, i tensori possono essere aggiunti solo lungo la quarta dimensione (asse 3). L'aggiunta di qualsiasi altro asse non è possibile, poiché le dimensioni dei tensori nella quarta dimensione non corrispondono.

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]]]]

Esempio 2. Aggiunta di tensori con più assi possibili:

Gli esempi seguenti usano gli stessi tensori di input. Poiché tutti gli input hanno la stessa dimensione in tutte le dimensioni, possono essere aggiunti lungo qualsiasi dimensione.

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]]]]

Aggiunta dell'asse 1:

Axis: 1

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

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

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

Asse di unione 2:

Axis: 2

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

Asse di unione 3:

Axis: 3

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

Disponibilità

Questo operatore è stato introdotto in DML_FEATURE_LEVEL_1_0.

Vincoli tensor

InputTensors e OutputTensor devono avere lo stesso oggetto DataType e DimensionCount.

Supporto di Tensor

DML_FEATURE_LEVEL_4_1 e versioni successive

Tensore Tipo Conteggi delle dimensioni supportate Tipi di dati supportati
InputTensors Matrice di input da 1 a 8 FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8
OutputTensor Output da 1 a 8 FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8

DML_FEATURE_LEVEL_3_0 e versioni successive

Tensore Tipo Conteggi delle dimensioni supportate Tipi di dati supportati
InputTensors Matrice di input da 4 a 5 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8
OutputTensor Output da 4 a 5 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8

DML_FEATURE_LEVEL_2_1 e versioni successive

Tensore Tipo Conteggi delle dimensioni supportate Tipi di dati supportati
InputTensors Matrice di input 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 e versioni successive

Tensore Tipo Conteggi delle dimensioni supportate Tipi di dati supportati
InputTensors Matrice di input 4 FLOAT32, FLOAT16, INT32, INT16, UINT32, UINT16
OutputTensor Output 4 FLOAT32, FLOAT16, INT32, INT16, UINT32, UINT16

Requisiti

   
Intestazione directml.h