Udostępnij przez


struktura DML_DIAGONAL_MATRIX1_OPERATOR_DESC (directml.h)

Generuje macierz podobną do tożsamości z tymi (lub inną jawną wartością) wzdłuż danego zakresu ukośnego, a inne elementy są wypełniane wartościami wejściowymi lub zerami (jeśli nie przekazano parametru InputTensor ). Wartości ukośne mogą być przesunięte w dowolnym miejscu między DiagonalFillBegin i DiagonalFillEnd, gdzie wartość większa niż zero przesuwa wszystkie wartości w prawo, a wartość mniejsza niż zero przesuwa je w lewo. Ten operator generatora jest przydatny w przypadku modeli, aby uniknąć przechowywania dużych tensorów stałych. Wszystkie wymiary wiodące przed ostatnimi dwoma są traktowane jako liczba partii, co oznacza, że tensor jest traktowany jako stos macierzy 2D. Ten operator wykonuje następujący pseudokod:

// 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

Ważne

Ten interfejs API jest dostępny w ramach autonomicznego pakietu redystrybucyjnego DirectML (zobacz Microsoft.AI.DirectML w wersji 1.9 lub nowszej. Zobacz również historię wersji języka DirectML.

Składnia

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;
};

Członkowie

InputTensor

Typ: _Maybenull_ const DML_TENSOR_DESC*

Opcjonalny tensor wejściowy.

OutputTensor

Typ: const DML_TENSOR_DESC*

Tensor do zapisania wyników. Wymiary to { Batch1, Batch2, OutputHeight, OutputWidth }. Wysokość i szerokość nie muszą być kwadratowe.

ValueDataType

Typ: DML_TENSOR_DATA_TYPE

Typ danych elementu członkowskiego Wartość , który musi być zgodny z parametrem OutputTensor::D ataType.

Value

Typ: DML_SCALAR_UNION

Stała wartość do wypełnienia danych wyjściowych z wartością ValueDataType określającą sposób interpretowania elementu członkowskiego.

DiagonalFillBegin

Typ: INT

Niższy limit (rozpoczynający się włącznie) zakresu do wypełnienia wartością. Jeśli początek i koniec zostaną odwrócone (początek > ), wypełnienie zostanie odwrócone.

DiagonalFillEnd

Typ: INT

Górny limit (kończący się wyłącznie) zakresu do wypełnienia wartością. Jeśli początek i koniec zostaną odwrócone (początek > ), wypełnienie zostanie odwrócone.

Przykłady

Domyślna macierz tożsamości:

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]]

Wypełnij pasek ukośny o szerokości 3 elementów:

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]]

Zachowaj połowę ukośną w prawym górnym rogu (ściśle górny trójkąt), zerując lewy dolny.

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]]

Zachowaj tylko wartości wzdłuż przekątnej, zerując wszystkie inne.

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]]

Uwagi

Ten operator jest odpowiednikiem DML_DIAGONAL_MATRIX_OPERATOR_DESC , gdy właściwość DiagonalFillBegin jest ustawiona na wartość DML_OPERATOR_DIAGONAL_MATRIX::Offset, a wartość DiagonalFillEnd jest ustawiona na wartość DML_OPERATOR_DIAGONAL_MATRIX::Offset + 1.

Dostępność

Ten operator został wprowadzony w DML_FEATURE_LEVEL_5_1.

Ograniczenia dotyczące tensorów

Klasy InputTensor i OutputTensor muszą mieć ten sam typ danych i parametr DimensionCount.

Obsługa biblioteki Tensor

Tensor Rodzaj Obsługiwane liczby wymiarów Obsługiwane typy danych
Tensor wejściowy Opcjonalne dane wejściowe Od 2 do 4 FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8
Tensor wyjściowy Wynik Od 2 do 4 FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8

Wymagania

   
Nagłówek directml.h