Share via


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_0eingefü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