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_0
eingefü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 |