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 |