Compartilhar via


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