Udostępnij przez


Buforowanie

Pooling (input,
         poolKind, # "max" or "average"
         {kernel dimensions}, 
         stride = {stride dimensions}, 
         autoPadding = {padding flags (boolean)},
         lowerPad = {lower padding (int)},
         upperPad = {upper padding (int)})

Operacje puli obliczają nową macierz, wybierając maksymalną (maksymalną pulę) lub średnią wartość w danych wejściowych puli. W przypadku średniej puli liczba średnich wartości nie obejmuje wartości wypełnionych.

Tworzenie puli nwymiarowej umożliwia tworzenie maksymalnej lub średniej puli dowolnych wymiarów, kroków lub dopełnień. Składnia jest następująca:

gdzie:

  • input — dane wejściowe puli
  • poolKind - "max" lub "average"
  • {kernel dimensions} - wymiary okna buforowania, jako wektor BrainScript, np. (4:4).
  • stride - [nazwane, opcjonalne, wartość domyślna to 1] krok.
  • autoPadding - [nazwane, opcjonalne, domyślne jest prawdziwe] automatyczne flagi wypełniania dla każdego wymiaru wejściowego.
  • lowerPad - [nazwane, opcjonalne, wartość domyślna to 0] dokładne dopełnienie dolne dla każdego wymiaru wejściowego
  • upperPad - [nazwane, opcjonalne, wartość domyślna to 0] precyzyjne wypełnienie górne dla każdego wymiaru wejściowego

Wszystkie tablice wymiarów są rozdzielone dwukropkiem. Uwaga: jeśli używasz przestarzałego NDLNetworkBuilderelementu , należy je rozdzielać przecinkami i zamiast nich ujęć.{ }

Ponieważ okno buforowania może mieć dowolne wymiary, pozwala to tworzyć różne konfiguracje puli, na przykład warstwę "Maxout" (zobacz Goodfellow et al. ):

MaxOutPool (inp, kW, kH, kC, hStride, vStride) =
    Pooling (inp, "max", (kW:kH:kC), stride=(hStride:vStride:kC), true:true:false))

Uproszczona składnia puli 2D

Istnieje uproszczona składnia buforowania 2D:

MaxPooling(m, windowWidth, windowHeight, stepW, stepH, imageLayout="cudnn" /* or "HWC"*/ )
AveragePooling(m, windowWidth, windowHeight, stepW, stepH, imageLayout="cudnn" /* or "HWC"*/ )

z następującymi parametrami:

  • m — macierz wejściowa.
  • windowWidth - szerokość okna puli
  • windowHeight - wysokość okna puli
  • stepW - krok (lub krok) używany w kierunku szerokości
  • stepH - krok (lub krok) używany w kierunku wysokości
  • imageLayout - [nazwany opcjonalnie] format przechowywania każdego obrazu. Jest to starsza opcja, której prawdopodobnie nie potrzebujesz. Domyślnie jest to HWCwartość , co oznacza, że każdy obraz jest przechowywany jako [channel, width, height] w notacji głównej kolumny. Aby uzyskać lepszą wydajność, zaleca się użycie cuDNN w tym przypadku, aby ustawić go na cudnnwartość , co oznacza, że każdy obraz jest przechowywany jako [szerokość, wysokość, kanał] w notacji głównej kolumny. Należy pamiętać, że cudnn format działa zarówno na procesorze GPU, jak i na procesorze CPU.

Przykład (makro NDL ConvReLULayer):

# pool2
pool2W = 2
pool2H = 2
pool2hStride = 2
pool2vStride = 2
pool2 = MaxPooling (conv2, pool2W, pool2H, pool2hStride, pool2vStride, imageLayout="$imageLayout$")

Uwaga: jeśli używasz przestarzałego NDLNetworkBuilderparametru , zamiast tego opcjonalny imageLayout parametr jest domyślny "HWC" .