Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
BatchNormalization(input, scale, bias, runMean, runVariance, spatial,
normalizationTimeConstant = 0,
blendTimeConstant = 0, epsilon = 0.00001, useCntkEngine = true)
Parameters
inputis de invoer van het batchnormalisatieknooppuntscaleis een ParameterTensor{} die de geleerde factoren voor componentgewijze schaalaanpassing bevat (gammaterm in de onderstaande vergelijking).biasis een ParameterTensor{} die de geleerde bias (betaterm) bevat.scaleenbiasmoet dezelfde dimensies hebben die gelijk moeten zijn aan deinputdimensies in het geval vanspatial = falseof het aantal functietoewijzingen voor uitvoerconvolution in het geval vanspatial = true.runMeanis het actieve gemiddelde dat wordt gebruikt tijdens de evaluatiefase en kan ook tijdens de training worden gebruikt. U moet een ParameterTensor{} doorgeven met dezelfde dimensies alsscaleenbias, initiële waarde 0 enlearningRateMultiplier=0instellen.runVarianceis de actieve variantie. Het wordt op dezelfde manier weergegeven alsrunMean.spatialis een vlag waarmee wordt aangegeven of voor elke functie in een minibatch afzonderlijk moet worden berekend of, in geval van convolutionele lagen, per functieoverzicht.normalizationTimeConstant(standaard 0): tijdconstante voor het berekenen van het gemiddelde gemiddelde en de variantie als een gefilterde versie met lage pass van de batchstatistieken. Opmerking: de standaardwaarde is meestal niet wat u wilt.blendTimeConstant(standaard 0): maakt het mogelijk om batchschattingen soepel te maken met de actieve statistiekenepsilonis een conditionerconstante toegevoegd aan de variantie bij het berekenen van de inverse standaarddeviatie.useCntkEngine(standaard: true): stel dit in omfalsede CUDNN-implementatie met GPU te selecteren
Retourwaarde
De batchgenormaliseerd input.
Description
BatchNormalization implementeert de techniek die wordt beschreven in paper Batch Normalization: Accelerating Deep Network Training by Reduce Internal Covariate Shift (Sergey Ioffe, Christian Szegedy).
Kortom, het normaliseert laaguitvoer voor elke minibatch voor elke uitvoer (functie) onafhankelijk en past affine transformatie toe om de weergave van de laag te behouden. Dat wil wel, voor laag input:
m = mean (input)
var = variance (input)
inputNorm = (input - mean)/sqrt (epsilon + var)
output = gamma * inputNorm + beta
waar gamma en beta trainbare parameters zijn.
mean en variance worden geschat op basis van trainingsgegevens. In het eenvoudigste geval zijn ze het gemiddelde en de variantie van de huidige minibatch tijdens de training. In deductie wordt in plaats daarvan een schatting op lange termijn gebruikt.
De schattingen voor de lange termijn zijn een laag-pass-gefilterde versie van de minibatch-statistieken, met de tijdconstante (in steekproeven) gegeven door de normalizationTimeConstant parameter.
Een waarde van 0 de middelen zal er geen exponentiële afvlakking en lopende gemiddelde/variantie altijd gelijk zijn aan die van de laatst geziene minibatch.
Dit is vaak ongewenst.
In plaats daarvan is het raadzaam om hier een waarde van een paar duizend te gebruiken.
De BatchNormalizationLayer{} wrapper heeft een standaardwaarde van 5000.
Voor meer informatie over tijdconstanten en exponentieel gladmaken: https://en.wikipedia.org/wiki/Exponential_smoothing#Time_Constant
Omdat minibatchstatistieken luidruchtig kunnen zijn, kan CNTK ook een MAP-schatting (maximum-a-posteriori) gebruiken tijdens de training, waarbij de lopende langetermijnraming wordt genomen als de vorige.
Het gewicht van de vorige wordt bepaald door de blendTimeConstant parameter.
Dit is echter tot nu toe niet nuttig gevonden in onze experimenten.
Houd er rekening mee dat tijdens deductie CNTK beide tijdconstanten automatisch instelt, zodat alleen het bestaande actieve gemiddelde wordt gebruikt en dat deze niet wordt bijgewerkt. De gebruiker heeft geen expliciete actie nodig.
cuDNN-implementatie
Deze functie maakt standaard gebruik van een CNTK-implementatie die werkt met zowel GPU's als CPU's. U kunt ervoor kiezen om de cuDNN-implementatie te gebruiken, die beter presteert. Houd er echter rekening mee dat de cuDNN-implementatie niet alle opties ondersteunt, en training vereist een GPU (CNTK echter wel een CPU-emulatie biedt voor deductie, zelfs als u de cuDNN-implementatie selecteert).