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 inputpoolKind
- "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 indatadimensionupperPad
- [namngiven, valfri, standard är 0] exakt övre utfyllnad för varje indatadimension
Alla dimensionsmatriser är kolonavgränsade. Obs! Om du använder den inaktuella NDLNetworkBuilder
må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önstretwindowHeight
– höjden på poolfönstretstepW
- steg (eller steg) som används i breddriktningenstepH
- steg (eller steg) som används i höjdriktningenimageLayout
- [namngiven valfritt] lagringsformatet för varje bild. Det här är ett äldre alternativ som du förmodligen inte behöver. Som standard ärHWC
det , 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 attcudnn
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 NDLNetworkBuilder
använder den valfria imageLayout
parametern standardinställningen "HWC"
i stället.