Freigeben über


DML_JOIN_OPERATOR_DESC-Struktur (directml.h)

Verkettet ein Array von Eingabe tensoren entlang einer angegebenen Achse.

Eingabe-Tensoren können nur verknüpft werden, wenn ihre Größen in allen Dimensionen identisch sind, mit Ausnahme der Verknüpfungsachse, die eine beliebige Größe ungleich 0 enthalten kann. Die Ausgabegrößen sind gleich den Eingabegrößen, mit Ausnahme der Joinachse, die die Summe der Joinachsengröße aller Eingaben darstellt. Diese Einschränkungen werden im folgenden Pseudocode veranschaulicht.

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

Das Verknüpfen eines einzelnen Eingabe tensors erzeugt einfach eine Kopie des Eingabe tensors.

Dieser Operator ist der Umgekehrte von DML_SPLIT_OPERATOR_DESC.

Syntax

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

Member

InputCount

Typ: UINT

Dieses Feld bestimmt die Größe des InputTensors-Arrays . Dieser Wert muss größer als 0 sein.

InputTensors

Typ: _Field_size_(InputCount) const DML_TENSOR_DESC*

Ein Array, das die Beschreibungen der Tensoren enthält, die in einem einzelnen Ausgabe tensor verknüpft werden sollen. Alle Eingabe tensoren in diesem Array müssen die gleichen Größen aufweisen, mit Ausnahme der Verknüpfungsachse, die einen beliebigen Wert ungleich 0 aufweisen kann.

OutputTensor

Typ: const DML_TENSOR_DESC*

Der Tensor, in den die verknüpften Eingabe tensoren geschrieben werden sollen. Die Ausgabegrößen müssen die gleichen Größen aufweisen wie alle Eingabe tensors mit Ausnahme der Joinachse, die der Summe der Joinachsengröße aller Eingaben entsprechen muss.

Axis

Typ: UINT

Der Index der Dimension der zu verbindenden Eingabe tensors. Alle Eingabe- und Ausgabe-Tensoren müssen in allen Dimensionen mit Ausnahme dieser Achse identische Größen aufweisen. Dieser Wert muss im Bereich liegen [0, OutputTensor.DimensionCount - 1].

Beispiele

Beispiel 1: Verknüpfen von Tensoren mit nur einer möglichen Achse

In diesem Beispiel können die Tensoren nur entlang der vierten Dimension (Achse 3) verknüpft werden. Das Verknüpfen einer anderen Achse ist nicht möglich, da die Größe der Tensoren in der vierten Dimension nicht übereinstimmt.

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

Beispiel 2: Verknüpfen von Tensoren mit mehreren möglichen Achsen:

In den folgenden Beispielen werden die gleichen Eingabe tensoren verwendet. Da alle Eingaben in allen Dimensionen die gleiche Größe haben, können sie entlang einer beliebigen Dimension verknüpft werden.

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

Verbindungsachse 1:

Axis: 1

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

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

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

Verknüpfungsachse 2:

Axis: 2

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

Verbindungsachse 3:

Axis: 3

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

Verfügbarkeit

Dieser Operator wurde in DML_FEATURE_LEVEL_1_0eingeführt.

Tensoreinschränkungen

InputTensors und OutputTensor müssen über denselben DataType und DimensionCount verfügen.

Tensorunterstützung

DML_FEATURE_LEVEL_4_1 und höher

Tensor Typ Unterstützte Dimensionsanzahl Unterstützte Datentypen
InputTensors Array von Eingaben 1 bis 8 FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8
OutputTensor Ausgabe 1 bis 8 FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8

DML_FEATURE_LEVEL_3_0 und höher

Tensor Typ Unterstützte Dimensionsanzahl Unterstützte Datentypen
InputTensors Array von Eingaben 4 bis 5 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8
OutputTensor Ausgabe 4 bis 5 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8

DML_FEATURE_LEVEL_2_1 und höher

Tensor Typ Unterstützte Dimensionsanzahl Unterstützte Datentypen
InputTensors Array von Eingaben 4 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8
OutputTensor Ausgabe 4 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8

DML_FEATURE_LEVEL_1_0 und höher

Tensor Typ Unterstützte Dimensionsanzahl Unterstützte Datentypen
InputTensors Array von Eingaben 4 FLOAT32, FLOAT16, INT32, INT16, UINT32, UINT16
OutputTensor Ausgabe 4 FLOAT32, FLOAT16, INT32, INT16, UINT32, UINT16

Anforderungen

   
Kopfzeile directml.h