Udostępnij przez


struktura DML_UNFOLD_OPERATOR_DESC (directml.h)

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