Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 |