Freigeben über


DML_DIAGONAL_MATRIX1_OPERATOR_DESC Struktur (directml.h)

Generiert eine identitätsähnliche Matrix mit einer (oder einem anderen expliziten Wert) entlang der angegebenen diagonalen Spanne, wobei andere Elemente mit den Eingabewerten oder Nullen gefüllt werden (wenn kein InputTensor übergeben wird). Die diagonalen Werte können zwischen DiagonalFillBegin und DiagonalFillEnd verschoben werden, wobei ein Wert größer als Null alle Werte nach rechts verschiebt und weniger als Null sie nach links verschiebt. Dieser Generatoroperator ist nützlich für Modelle, um zu vermeiden, dass ein großer Konstanten-Tensor gespeichert wird. Alle führenden Dimensionen vor den letzten beiden werden als Batchanzahl behandelt, was bedeutet, dass der Tensor als Stapel von 2D-Matrizen behandelt wird. Dieser Operator führt den folgenden Pseudocode aus:

// Given each current coordinate's x, figure out the corresponding x on the top (0th) row.
// Then fill it with Value if that x coordinate is either within the fill bounds, or outside
// the fill bounds when inverted. Otherwise, use the original input value or zero.

for each coordinate in OutputTensor
    topX = coordinate.x - coordinate.y
    useValue = (DiagonalFillEnd >= DiagonalFillBegin) ^ (topX >= DiagonalFillBegin) ^ (topX < DiagonalFillEnd)
    OutputTensor[coordinate] = if useValue then Value
                               else if InputTensor not null then InputTensor[coordinate]
                               else 0
endfor

Von Bedeutung

Diese API ist als Teil des eigenständigen Redistributable-Pakets von DirectML verfügbar (siehe Microsoft.AI.DirectML , Version 1.9 und höher). Siehe auch den DirectML-Versionsverlauf.

Syntax

struct DML_DIAGONAL_MATRIX1_OPERATOR_DESC
{
    _Maybenull_ const DML_TENSOR_DESC* InputTensor;
    const DML_TENSOR_DESC* OutputTensor;
    DML_TENSOR_DATA_TYPE ValueDataType;
    DML_SCALAR_UNION Value;
    INT DiagonalFillBegin;
    INT DiagonalFillEnd;
};

Elemente

InputTensor

Typ: _Maybenull_ const DML_TENSOR_DESC*

Ein optionaler Eingabe-Tensor.

OutputTensor

Typ: const DML_TENSOR_DESC*

Der Tensor, in den die Ergebnisse geschrieben werden sollen. Die Abmessungen sind { Batch1, Batch2, OutputHeight, OutputWidth }. Die Höhe und Breite müssen nicht quadratisch sein.

ValueDataType

Typ: DML_TENSOR_DATA_TYPE

Der Datentyp des Value-Elements , der mit OutputTensor::D ataType übereinstimmen muss.

Value

Typ: DML_SCALAR_UNION

Ein konstanter Wert, der die Ausgabe ausfüllt, wobei ValueDataType bestimmt, wie das Element interpretiert werden soll.

DiagonalFillBegin

Typ: INT

Die untere Grenze (einschließlich Anfang) des Bereichs, der mit "Value" gefüllt werden soll. Wenn der Anfang und das Ende invertiert sind (Anfangsende > ), wird die Füllung umgekehrt.

DiagonalFillEnd

Typ: INT

Die obere Grenze (enden ausschließlich) des Bereichs, der mit "Value" gefüllt werden soll. Wenn der Anfang und das Ende invertiert sind (Anfangsende > ), wird die Füllung umgekehrt.

Beispiele

Standardidentitätsmatrix:

InputTensor: none
ValueDataType: FLOAT32
Value: 7
DiagonalFillBegin: 0
DiagonalFillEnd: 1
OutputTensor: (Sizes:{4,5} DataType:FLOAT32)
    [[1, 0, 0, 0, 0],
     [0, 1, 0, 0, 0],
     [0, 0, 1, 0, 0],
     [0, 0, 0, 1, 0]]

Füllen Sie einen 3-elementweiten diagonalen Streifen aus:

InputTensor: none
ValueDataType: FLOAT32
Value: 7
DiagonalFillBegin: 0
DiagonalFillEnd: 3
OutputTensor: (Sizes:{4,5} DataType:FLOAT32)
    [[7, 7, 7, 0, 0],
     [0, 7, 7, 7, 0],
     [0, 0, 7, 7, 7],
     [0, 0, 0, 7, 7]]

Behalten Sie die diagonale obere Hälfte (das streng obere Dreieck) bei, und nullen Sie dann unten links.

InputTensor: (Sizes:{4,5} DataType:FLOAT32)
    [[4, 7, 3, 7, 9],
     [1, 2, 8, 6, 9],
     [9, 4, 1, 8, 7],
     [4, 3, 4, 2, 4]]
ValueDataType: FLOAT32
Value: 0
DiagonalFillBegin: INT32_MIN
DiagonalFillEnd: 1
OutputTensor: (Sizes:{4,5} DataType:FLOAT32)
    [[0, 7, 3, 7, 9],
     [0, 0, 8, 6, 9],
     [0, 0, 0, 8, 7],
     [0, 0, 0, 0, 4]]

Behalten Sie nur die Werte entlang der Diagonalen bei, wobei alle anderen Nullwerte entfernt werden.

InputTensor: (Sizes:{4,5} DataType:FLOAT32)
    [[4, 7, 3, 7, 9],
     [1, 2, 8, 6, 9],
     [9, 4, 1, 8, 7],
     [4, 3, 4, 2, 4]]
ValueDataType: FLOAT32
Value: 0
DiagonalFillBegin: 1
DiagonalFillEnd: 0
OutputTensor: (Sizes:{4,5} DataType:FLOAT32)
    [[4, 0, 0, 0, 0],
     [0, 2, 0, 0, 0],
     [0, 0, 1, 0, 0],
     [0, 0, 0, 2, 0]]

Bemerkungen

Dieser Operator entspricht DML_DIAGONAL_MATRIX_OPERATOR_DESC , wenn DiagonalFillBegin auf DML_OPERATOR_DIAGONAL_MATRIX::Offset festgelegt ist und DiagonalFillEnd auf DML_OPERATOR_DIAGONAL_MATRIX::Offset + 1 festgelegt ist.

Verfügbarkeit

Dieser Operator wurde in DML_FEATURE_LEVEL_5_1 eingeführt.

Tensoreinschränkungen

"InputTensor " und " OutputTensor " müssen denselben Datentyp und "DimensionCount" aufweisen.

Tensorunterstützung

Tensor Variante Unterstützte Dimensionsanzahl Unterstützte Datentypen
InputTensor Optionale Eingabe 2 bis 4 FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8
AusgangTensor Ausgabe 2 bis 4 FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8

Anforderungen

   
Kopfball directml.h