DML_DIAGONAL_MATRIX_OPERATOR_DESC-Struktur (directml.h)
Generiert eine identitätsähnliche Matrix mit einsen (oder einem anderen expliziten Wert) auf der Hauptdiagonale und überall nullen. Die Diagonalen können (über Offset) verschoben werden, wobei OutputTensor[i, i + Offset]
= Value, was bedeutet, dass ein Argument von Offset größer als null alle Werte nach rechts und kleiner als null nach links verschiebt. Dieser Generatoroperator ist für Modelle nützlich, um das Speichern eines großen konstanten Tensors zu vermeiden. Alle führenden Dimensionen vor den letzten beiden werden als Batchanzahl behandelt, was bedeutet, dass der Tensor als Stapel aus 2D-Matrizen behandelt wird.
Dieser Operator führt den folgenden Pseudocode aus.
for each coordinate in OutputTensor
OutputTensor[coordinate] = if (coordinate.y + Offset == coordinate.x) then Value else 0
endfor
Syntax
struct DML_DIAGONAL_MATRIX_OPERATOR_DESC {
const DML_TENSOR_DESC *OutputTensor;
INT Offset;
FLOAT Value;
};
Member
OutputTensor
Typ: const DML_TENSOR_DESC*
Der Tensor, in den die Ergebnisse geschrieben werden sollen. Die Dimensionen sind { Batch1, Batch2, OutputHeight, OutputWidth }
. Höhe und Breite müssen nicht quadratisch sein.
Offset
Typ: INT
Ein Offset, um die diagonalen Linien von Value zu verschieben, wobei positive Offsets den geschriebenen Wert nach rechts/nach oben verschieben (die Ausgabe als Matrix mit der oberen linken Seite als 0,0) und negative Offsets nach links/unten verschieben.
Value
Typ: FLOAT
Ein Wert, der entlang der 2D-Diagonale ausgefüllt werden soll. Der Standardwert ist 1,0. Beachten Sie, dass, wenn der Datentyp der Tensoren nicht DML_TENSOR_DATA_TYPE_FLOAT16 oder DML_TENSOR_DATA_TYPE_FLOAT32 ist, der Wert möglicherweise abgeschnitten wird (z. B. wird 10.6 zu 10).
Beispiele
Standardidentitätsmatrix:
Offset: 0
Value: 1.0
OutputTensor: (Sizes:{1,1,3,3}, DataType:FLOAT32)
[[[[1, 0, 0],
[0, 1, 0],
[0, 0, 1]]]]
Verschieben sie nach rechts/oben:
Offset: 1
Value: 1.0
OutputTensor: (Sizes:{1,1,3,3}, DataType:FLOAT32)
[[[[ 0, 1, 0],
[ 0, 0, 1],
[ 0, 0, 0]]]]
Verschieben sie links/nach unten:
Offset: -1
Value: 1.0
OutputTensor: (Sizes:{1,1,3,2}, DataType:FLOAT32)
[[[[0, 0],
[1, 0],
[0, 1]]]]
Verschieben Sie die diagonale Linie der Einsen so weit, dass alle nullen werden:
Offset: -3
Value: 1.0
OutputTensor: (Sizes:{1,1,3,2}, DataType:FLOAT32)
[[[[0, 0],
[0, 0],
[0, 0]]]]
Hinweise
Verfügbarkeit
Dieser Operator wurde in DML_FEATURE_LEVEL_2_0
eingeführt.
Tensorunterstützung
DML_FEATURE_LEVEL_5_1 und höher
Tensor | Variante | Unterstützte Dimensionsanzahl | Unterstützte Datentypen |
---|---|---|---|
OutputTensor | Ausgabe | 2 bis 4 | FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_4_0 und höher
Tensor | Variante | Unterstützte Dimensionsanzahl | Unterstützte Datentypen |
---|---|---|---|
OutputTensor | Ausgabe | 2 bis 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_2_1 und höher
Tensor | Variante | Unterstützte Dimensionsanzahl | Unterstützte Datentypen |
---|---|---|---|
OutputTensor | Ausgabe | 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_2_0 und höher
Tensor | Variante | Unterstützte Dimensionsanzahl | Unterstützte Datentypen |
---|---|---|---|
OutputTensor | Ausgabe | 4 | FLOAT32, FLOAT16 |
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows 10, Version 2004 (10.0; Build 19041) |
Unterstützte Mindestversion (Server) | Windows Server, Version 2004 (10.0; Build 19041) |
Kopfzeile | directml.h |