Compartir a través de


estructura DML_JOIN_OPERATOR_DESC (directml.h)

Concatena una matriz de tensores de entrada a lo largo de un eje especificado.

Los tensores de entrada solo se pueden unir si sus tamaños son idénticos en todas las dimensiones, excepto en el eje de combinación, que puede contener cualquier tamaño distinto de cero. Los tamaños de salida son iguales a los tamaños de entrada, excepto para el eje de combinación, que es la suma del tamaño del eje de combinación de todas las entradas. Estas restricciones se muestran en el pseudocódigo siguiente.

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

Unir un único tensor de entrada simplemente genera una copia del tensor de entrada.

Este operador es el inverso de DML_SPLIT_OPERATOR_DESC.

Sintaxis

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

Miembros

InputCount

Tipo: UINT

Este campo determina el tamaño de la matriz InputTensors . Este valor debe ser mayor que 0.

InputTensors

Tipo: _Field_size_(InputCount) const DML_TENSOR_DESC*

Matriz que contiene las descripciones de los tensores que se van a combinar en un único tensor de salida. Todos los tensores de entrada de esta matriz deben tener los mismos tamaños, excepto para el eje de combinación, que puede tener cualquier valor distinto de cero.

OutputTensor

Tipo: const DML_TENSOR_DESC*

Tensor en el que se va a escribir los tensores de entrada unidos. Los tamaños de salida deben tener los mismos tamaños que todos los tensores de entrada, excepto para el eje de combinación, que debe ser igual a la suma del tamaño del eje de combinación de todas las entradas.

Axis

Tipo: UINT

Índice de la dimensión de los tensores de entrada que se van a combinar. Todos los tensores de entrada y salida deben tener tamaños idénticos en todas las dimensiones, excepto para este eje. Este valor debe estar en el intervalo [0, OutputTensor.DimensionCount - 1].

Ejemplos

Ejemplo 1. Unión de tensores con un solo eje posible

En este ejemplo, los tensores solo se pueden unir a lo largo de la cuarta dimensión (eje 3). No es posible unir cualquier otro eje, ya que el tamaño de los tensores de la cuarta dimensión no coincide.

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

Ejemplo 2. Unir tensores con varios ejes posibles:

En los ejemplos siguientes se usan los mismos tensores de entrada. Dado que todas las entradas tienen el mismo tamaño en todas las dimensiones, se pueden combinar a lo largo de cualquier dimensión.

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

Eje de unión 1:

Axis: 1

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

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

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

Eje de unión 2:

Axis: 2

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

Eje de unión 3:

Axis: 3

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

Disponibilidad

Este operador se introdujo en DML_FEATURE_LEVEL_1_0.

Restricciones tensor

InputTensors y OutputTensor deben tener el mismo DataType y DimensionCount.

Compatibilidad con Tensor

DML_FEATURE_LEVEL_4_1 y versiones posteriores

Tensor Kind Recuentos de dimensiones admitidos Tipos de datos admitidos
InputTensors Matriz de entradas De 1 a 8 FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8
OutputTensor Resultados De 1 a 8 FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8

DML_FEATURE_LEVEL_3_0 y versiones posteriores

Tensor Kind Recuentos de dimensiones admitidos Tipos de datos admitidos
InputTensors Matriz de entradas De 4 a 5 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8
OutputTensor Resultados De 4 a 5 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8

DML_FEATURE_LEVEL_2_1 y versiones posteriores

Tensor Kind Recuentos de dimensiones admitidos Tipos de datos admitidos
InputTensors Matriz de entradas 4 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8
OutputTensor Resultados 4 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8

DML_FEATURE_LEVEL_1_0 y versiones posteriores

Tensor Kind Recuentos de dimensiones admitidos Tipos de datos admitidos
InputTensors Matriz de entradas 4 FLOAT32, FLOAT16, INT32, INT16, UINT32, UINT16
OutputTensor Resultados 4 FLOAT32, FLOAT16, INT32, INT16, UINT32, UINT16

Requisitos

   
Encabezado directml.h