Freigeben über


DML_DIAGONAL_MATRIX1_OPERATOR_DESC-Struktur (directml.h)

Erzeugt eine identitätsähnliche Matrix mit Einsen (oder einem anderen expliziten Wert) entlang der angegebenen Diagonale, wobei die anderen Elemente entweder 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

Wichtig

Diese API ist als Teil des eigenständigen weiterverteilbare Pakets DirectML verfügbar (siehe Microsoft.AI.DirectML , Version 1.9 und höher). Siehe auch 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;
};

Member

InputTensor

Typ: _Maybenull_ const DML_TENSOR_DESC*

Ein optionaler Eingabe-Tensor.

OutputTensor

Typ: const DML_TENSOR_DESC*

Der Tensor, in den das Ergebnis geschrieben werden soll. 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::DataType ü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 (Anfang > Ende), wird die Füllung umgekehrt.

DiagonalFillEnd

Typ: INT

Die obere Grenze (Enden ausgeschlossen) des Bereichs, der mit Value gefüllt werden soll. Wenn der Anfang und das Ende invertiert sind (Anfang > Ende), wird die Füllung umgekehrt.

Beispiele

Standard-Identitä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 genaue 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]]

Hinweise

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

Verfügbarkeit

Dieser Operator wurde in DML_FEATURE_LEVEL_5_1 eingeführt.

Tensor-Einschränkungen

InputTensor und OutputTensor müssen denselben DataType und DimensionCount aufweisen.

Tensor-Unterstü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
OutputTensor Output 2 bis 4 FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8

Anforderungen

   
Übergeordnet directml.h