przepływ tensorowy:: ops:: Głębia do przestrzeni

#include <array_ops.h>

DepthToSpace dla tensorów typu T.

Streszczenie

Przestawia dane z głębi na bloki danych przestrzennych. Jest to odwrotna transformacja SpaceToDepth. Mówiąc dokładniej, ta operacja generuje kopię tensora wejściowego, w którym wartości z wymiaru depth są przenoszone w blokach przestrzennych do wymiarów height i width . Atrybut block_size wskazuje rozmiar bloku wejściowego i sposób przenoszenia danych.

  • Kawałki danych o rozmiarze block_size * block_size z głębokości są układane w nienakładające się bloki o rozmiarze block_size x block_size
  • Szerokość tensora wyjściowego to input_depth * block_size , natomiast wysokość to input_height * block_size .
  • Współrzędne Y, X w każdym bloku obrazu wyjściowego są określane przez składową wyższego rzędu indeksu kanału wejściowego.
  • Głębokość tensora wejściowego musi być podzielna przez block_size * block_size .

Atrybut data_format określa układ tensorów wejściowych i wyjściowych za pomocą następujących opcji: „NHWC”: [ batch, height, width, channels ] „NCHW”: [ batch, channels, height, width ] „NCHW_VECT_C”: qint8 [ batch, channels / 4, height, width, 4 ]

Warto rozważyć tę operację jako transformację tensora 6-D. np. dla format_danych = NHWC, każdy element tensora wejściowego można określić za pomocą 6 współrzędnych, uporządkowanych według malejącego znaczenia układu pamięci jako: n,iY,iX,bY,bX,oC (gdzie n=indeks wsadowy, iX, iY oznacza X lub Y w obrazie wejściowym, bX, bY oznaczają współrzędne w bloku wyjściowym, oC oznacza kanały wyjściowe). Dane wyjściowe będą danymi wejściowymi przetransponowanymi do następującego układu: n,iY,bY,iX,bX,oC

Ta operacja jest przydatna do zmiany rozmiaru aktywacji pomiędzy splotami (ale przy zachowaniu wszystkich danych), np. zamiast łączenia. Jest również przydatny do uczenia modeli czysto splotowych.

Na przykład, biorąc pod uwagę dane wejściowe kształtu [1, 1, 1, 4] , data_format = "NHWC" i block_size = 2:

x = [[[[1, 2, 3, 4]]]]

  


 

This operation will output a tensor of shape [1, 2, 2, 1]:


 


   

 Tutaj wejście ma partię 1, a każdy element partii ma kształt [1, 1, 4] , odpowiednie wyjście będzie miało 2x2 elementy i będzie miało głębokość 1 kanału (1 = 4 / (block_size * block_size) ). Kształt elementu wyjściowego to [2, 2, 1] .

Dla tensora wejściowego o większej głębokości, tutaj o kształcie [1, 1, 1, 12] , np.

 Ta operacja, dla bloku o rozmiarze 2, zwróci następujący tensor kształtu [1, 2, 2, 3]