Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 |