Dela via


Poolning

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

Poolåtgärderna beräknar en ny matris genom att välja maxvärdet (max pooling) eller medelvärdet i poolingindata. När det gäller genomsnittlig poolning inkluderar inte antalet medelvärden vadderade värden.

Med N-dimensionella pooler kan du skapa maximal eller genomsnittlig poolning av alla dimensioner, steg eller utfyllnad. Syntax:

där:

  • input – pooling input
  • poolKind - "max" eller "genomsnitt"
  • {kernel dimensions} – dimensioner av poolfönstret, som en BrainScript-vektor, t.ex. (4:4).
  • stride - [namngivet, valfritt, standard är 1] steg.
  • autoPadding - [namngivna, valfria, standard är sant] automatiska utfyllnadsflaggor för varje indatadimension.
  • lowerPad - [namngiven, valfri, standard är 0] exakt lägre utfyllnad för varje indatadimension
  • upperPad - [namngiven, valfri, standard är 0] exakt övre utfyllnad för varje indatadimension

Alla dimensionsmatriser är kolonavgränsade. Obs! Om du använder den inaktuella NDLNetworkBuildermåste dessa vara kommaavgränsade och omslutna i { } stället.

Eftersom poolningsfönstret kan ha godtyckliga dimensioner kan du skapa olika poolkonfigurationer, till exempel ett "Maxout"-lager (se Goodfellow et al för mer information):

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

Förenklad syntax för 2D-poolning

Det finns en förenklad syntax för 2D-pooler:

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

med följande parametrar:

  • m – indatamatrisen.
  • windowWidth – bredden på poolfönstret
  • windowHeight – höjden på poolfönstret
  • stepW - steg (eller steg) som används i breddriktningen
  • stepH - steg (eller steg) som används i höjdriktningen
  • imageLayout - [namngiven valfritt] lagringsformatet för varje bild. Det här är ett äldre alternativ som du förmodligen inte behöver. Som standard är HWCdet , vilket innebär att varje bild lagras som [channel, width, height] i kolumnmajornotation. För bättre prestanda rekommenderar vi att du använder cuDNN i så fall att du ställer in den på cudnn, vilket innebär att varje bild lagras som [bredd, höjd, kanal] i kolumnens huvudnotation. Observera att cudnn formatet fungerar både på GPU och CPU.

Exempel (ConvReLULayer NDL-makro):

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

Obs! Om du använder den inaktuella NDLNetworkBuilderanvänder den valfria imageLayout parametern standardinställningen "HWC" i stället.