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.
Wyodrębnia przesuwane bloki lokalne z wsadowego tensoru wejściowego.
Rozważmy funkcję InputTensor z kształtem (N,C,*), gdzie * jest dowolną liczbą wymiarów przestrzennych (<=6). Operacja spłaszcza każdy blok WindowSize'd w inputTensor do kolumny OutputTensor. OutputTensor to tensor 3D zawierający przesuwające się bloki lokalne, np. poprawki obrazów, kształt (N,C×∏(WindowSizes),BlockCount), gdzie N jest wymiarem wsadowym, C×∏(WindowSizes) jest liczbą wartości w oknie (okno ma ∏ (WindowSizes) lokalizacje przestrzenne, z których każdy zawiera wektor c-channeled), a BlockCount jest całkowitą liczbą bloków. Argumenty muszą spełniać następujące wymagania:
BlocksPerDimension[d] = ( SpatialSize[d] + StartPadding[d] + EndPadding[d] - Dilations[d] * (WindowSizes[d] - 1) - 1 ) / stride[d] ) + 1
LiczbaBloków = ∏d BlokiNa Wymiar[d]
Gdzie:
- SpatialSize jest tworzony przez wymiary przestrzenne danych wejściowych (*)
- <0 = d < LiczbaWymiarów
Indeksowanie danych wyjściowych w ostatnim wymiarze (wymiar kolumny) daje wszystkie wartości w ramach określonego bloku.
Argumenty StartPadding, EndPadding, Strides i Dilations określają sposób pobierania bloków przesuwnych.
Ważne
Ten interfejs API jest dostępny w ramach autonomicznego pakietu redystrybucyjnego DirectML (zobacz Microsoft.AI.DirectML w wersji 1.15.1 lub nowszej. Zobacz również historię wersji języka DirectML.
Składnia
struct DML_UNFOLD_OPERATOR_DESC
{
const DML_TENSOR_DESC* InputTensor;
const DML_TENSOR_DESC* OutputTensor;
UINT DimensionCount;
_Field_size_(DimensionCount) const UINT* WindowSizes;
_Field_size_(DimensionCount) const UINT* Strides;
_Field_size_(DimensionCount) const UINT* Dilations;
_Field_size_(DimensionCount) const UINT* StartPadding;
_Field_size_(DimensionCount) const UINT* EndPadding;
};
Członkowie
InputTensor
Typ: const DML_TENSOR_DESC*
Tensor wejściowy do odczytu.
OutputTensor
Typ: const DML_TENSOR_DESC*
Tensor wyjściowy do zapisania wyników.
DimensionCount
Typ: UINT
Wymiary przestrzenne elementu InputTensor.
Element DimensionCount musi znajdować się w zakresie [1, 6].
WindowSizes
Typ: _Field_size_(DimensionCount) const UINT*
Rozmiar okna przesuwanego.
Strides
Typ: _Field_size_(DimensionCount) const UINT*
Krok okna przesuwanego (z wymiarami WindowSizes) w wymiarach wejściowych przestrzennych. Są one oddzielone od kroków tensorowych uwzględnionych w DML_TENSOR_DESC. Rozmiar kroku wyodrębnionych poprawek.
Dilations
Typ: _Field_size_(DimensionCount) const UINT*
Różnice w przesuwanym oknie (z wymiarami WindowSizes) w wymiarach wejściowych przestrzennych przez skalowanie przestrzeni między punktami jądra. Dylatacje wyodrębnionej poprawki.
StartPadding
Typ: _Field_size_(DimensionCount) const UINT*
Tablica zawierająca niejawne wypełnienie zerowe, które ma być stosowane na początku każdego wymiaru przestrzennego InputTensor. Rozpocznij dopełnianie tensoru źródłowego.
EndPadding
Typ: _Field_size_(DimensionCount) const UINT*
Tablica zawierająca niejawne wypełnienie zerowe, które ma być stosowane na końcu każdego wymiaru przestrzennego InputTensor. Dopełnienie końcowe tensoru źródłowego.
Przykłady
Przykład 1.
1 kanał rozwija się.
InputTensor: (Sizes:{1, 1, 5, 5}, DataType:FLOAT32)
[[[[ 0., 1., 2., 3., 4.],
[ 5., 6., 7., 8., 9.],
[10., 11., 12., 13., 14.],
[15., 16., 17., 18., 19.],
[20., 21., 22., 23., 24.]]]]
DimensionCount: 2
WindowSizes: {3, 3}
Strides: {1, 1}
Dilations: {1, 1}
StartPadding: {0, 0}
EndPadding: {0, 0}
OutputTensor: (Sizes:{1, 9, 9}, DataType:FLOAT32)
[[[ 0., 1., 2., 5., 6., 7., 10., 11., 12.],
[ 1., 2., 3., 6., 7., 8., 11., 12., 13.],
[ 2., 3., 4., 7., 8., 9., 12., 13., 14.],
[ 5., 6., 7., 10., 11., 12., 15., 16., 17.],
[ 6., 7., 8., 11., 12., 13., 16., 17., 18.],
[ 7., 8., 9., 12., 13., 14., 17., 18., 19.],
[10., 11., 12., 15., 16., 17., 20., 21., 22.],
[11., 12., 13., 16., 17., 18., 21., 22., 23.],
[12., 13., 14., 17., 18., 19., 22., 23., 24.]]]
Przykład 2.
1-kanałowy, zwinięty zwinięty.
InputTensor: (Sizes:{1, 1, 5, 5}, DataType:FLOAT32)
[[[[ 0., 1., 2., 3., 4.],
[ 5., 6., 7., 8., 9.],
[10., 11., 12., 13., 14.],
[15., 16., 17., 18., 19.],
[20., 21., 22., 23., 24.]]]]
DimensionCount: 2
WindowSizes: {3, 3}
Strides: {1, 1}
Dilations: {1, 1}
StartPadding: {1, 0}
EndPadding: {1, 0}
OutputTensor: (Sizes:{1, 9, 15}, DataType:FLOAT32)
[[[ 0., 0., 0., 0., 1., 2., 5., 6., 7., 10., 11., 12., 15., 16., 17.],
[ 0., 0., 0., 1., 2., 3., 6., 7., 8., 11., 12., 13., 16., 17., 18.],
[ 0., 0., 0., 2., 3., 4., 7., 8., 9., 12., 13., 14., 17., 18., 19.],
[ 0., 1., 2., 5., 6., 7., 10., 11., 12., 15., 16., 17., 20., 21., 22.],
[ 1., 2., 3., 6., 7., 8., 11., 12., 13., 16., 17., 18., 21., 22., 23.],
[ 2., 3., 4., 7., 8., 9., 12., 13., 14., 17., 18., 19., 22., 23., 24.],
[ 5., 6., 7., 10., 11., 12., 15., 16., 17., 20., 21., 22., 0., 0., 0.],
[ 6., 7., 8., 11., 12., 13., 16., 17., 18., 21., 22., 23., 0., 0., 0.],
[ 7., 8., 9., 12., 13., 14., 17., 18., 19., 22., 23., 24., 0., 0., 0.]]]
Dostępność
Ten operator został wprowadzony w DML_FEATURE_LEVEL_6_4.
Ograniczenia dotyczące tensorów
Elementy InputTensor i OutputTensor muszą mieć ten sam parametr DimensionCount.
Obsługa biblioteki Tensor
| Tensor | Rodzaj | Obsługiwane liczby wymiarów | Obsługiwane typy danych |
|---|---|---|---|
| Tensor wejściowy | Dane wejściowe | Od 3 do 8 | |
| Tensor wyjściowy | Wynik | Od 3 do 8 |
Wymagania
| Nagłówek | directml.h |