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 |