estrutura DML_JOIN_OPERATOR_DESC (directml.h)
Concatena uma matriz de tensores de entrada ao longo de um eixo especificado.
Tensores de entrada só poderão ser unidos se seus tamanhos forem idênticos em todas as dimensões, exceto no eixo de junção, que pode conter qualquer tamanho diferente de zero. Os tamanhos de saída são iguais aos tamanhos de entrada, exceto para o eixo de junção, que é a soma do tamanho do eixo de junção de todas as entradas. Essas restrições são ilustradas no pseudocódigo abaixo.
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]);
A junção de um tensor de entrada simples simplesmente produz uma cópia do tensor de entrada.
Esse operador é o inverso de DML_SPLIT_OPERATOR_DESC.
Sintaxe
struct DML_JOIN_OPERATOR_DESC {
UINT InputCount;
const DML_TENSOR_DESC *InputTensors;
const DML_TENSOR_DESC *OutputTensor;
UINT Axis;
};
Membros
InputCount
Tipo: UINT
Esse campo determina o tamanho da matriz InputTensors . Esse valor deve ser maior que 0.
InputTensors
Tipo: _Field_size_(InputCount) const DML_TENSOR_DESC*
Uma matriz que contém as descrições dos tensores para ingressar em um tensor de saída única. Todos os tensores de entrada nessa matriz devem ter os mesmos tamanhos, exceto o eixo de junção, que pode ter qualquer valor diferente de zero.
OutputTensor
Tipo: const DML_TENSOR_DESC*
O tensor no qual gravar os tensores de entrada ingressados. Os tamanhos de saída devem ter os mesmos tamanhos que todos os tensores de entrada, exceto para o eixo de junção, que deve ser igual à soma do tamanho do eixo de junção de todas as entradas.
Axis
Tipo: UINT
O índice da dimensão dos tensores de entrada a serem unidos. Todos os tensores de entrada e saída devem ter tamanhos idênticos em todas as dimensões, exceto para esse eixo. Esse valor deve estar no intervalo [0, OutputTensor.DimensionCount - 1]
.
Exemplos
Exemplo 1. Unir tensores com apenas um eixo possível
Neste exemplo, os tensores só podem ser unidos ao longo da quarta dimensão (eixo 3). A junção de qualquer outro eixo não é possível, pois o tamanho dos tensores na quarta dimensão não corresponde.
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]]]]
Exemplo 2. Unir tensores com vários eixos possíveis:
Os exemplos a seguir usam os mesmos tensores de entrada. Como todas as entradas têm o mesmo tamanho em todas as dimensões, elas podem ser unidas em qualquer dimensão.
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]]]]
Eixo de junção 1:
Axis: 1
OutputTensor: (Sizes:{1, 3, 2, 2}, DataType:FLOAT32)
[[[[1, 2],
[3, 4]],
[[5, 6],
[7, 8]],
[[9, 10],
[11, 12]]]]
Eixo de junção 2:
Axis: 2
OutputTensor: (Sizes:{1, 1, 6, 2}, DataType:FLOAT32)
[[[[1, 2],
[3, 4],
[5, 6],
[7, 8],
[9, 10],
[11, 12]]]]
Eixo de junção 3:
Axis: 3
OutputTensor: (Sizes:{1, 1, 2, 6}, DataType:FLOAT32)
[[[[1, 2, 5, 6, 9, 10],
[3, 4, 7, 8, 11, 12]]]]
Disponibilidade
Esse operador foi introduzido em DML_FEATURE_LEVEL_1_0
.
Restrições do Tensor
InputTensors e OutputTensor devem ter os mesmos DataType e DimensionCount.
Suporte ao Tensor
DML_FEATURE_LEVEL_4_1 e superior
Tensor | Tipo | Contagens de dimensões com suporte | Tipos de dados com suporte |
---|---|---|---|
InputTensors | Matriz de entradas | 1 a 8 | FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
OutputTensor | Saída | 1 a 8 | FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_3_0 e superior
Tensor | Tipo | Contagens de dimensões com suporte | Tipos de dados com suporte |
---|---|---|---|
InputTensors | Matriz de entradas | 4 a 5 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputTensor | Saída | 4 a 5 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_2_1 e superior
Tensor | Tipo | Contagens de dimensões com suporte | Tipos de dados com suporte |
---|---|---|---|
InputTensors | Matriz de entradas | 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputTensor | Saída | 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_1_0 e superior
Tensor | Tipo | Contagens de dimensões com suporte | Tipos de dados com suporte |
---|---|---|---|
InputTensors | Matriz de entradas | 4 | FLOAT32, FLOAT16, INT32, INT16, UINT32, UINT16 |
OutputTensor | Saída | 4 | FLOAT32, FLOAT16, INT32, INT16, UINT32, UINT16 |
Requisitos
Cabeçalho | directml.h |