Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse zu wechseln.
BatchNormalization(input, scale, bias, runMean, runVariance, spatial,
normalizationTimeConstant = 0,
blendTimeConstant = 0, epsilon = 0.00001, useCntkEngine = true)
Parameter
inputist die Eingabe des Batch normalisierungsknotensscaleist ein ParameterTensor{} , der die gelernten Komponentenskalierungsfaktoren (gammaAusdruck in der folgenden Formel) enthält.biasist ein ParameterTensor{} , der die gelernte Verzerrung (betaAusdruck) enthält.scaleundbiasmuss dieselben Dimensionen aufweisen, die deninputAbmessungen entsprechen müssen, falls die Anzahl derspatial = falseAusgabekonvolution-Featurezuordnungen im Fall vonspatial = true.runMeanist der laufende Mittelwert, der während der Evaluierungsphase verwendet wird und auch während der Schulung verwendet werden kann. Sie müssen einen ParameterTensor{} mit den gleichen Dimensionenscalewie undbias, Anfangswert 0 übergeben undlearningRateMultiplier=0festlegen.runVarianceist die laufende Varianz. Es wird auf die gleiche Weise dargestellt wierunMean.spatialist ein Flag, das angibt, ob für jedes Feature in einem Minibatch unabhängig oder im Falle von konvolutionalen Layern pro Featurezuordnung mittel/var berechnet werden soll.normalizationTimeConstant(Standard 0): Zeitkonstante für die Berechnung des Mittelwerts und der Varianz als gefilterte Version der Batchstatistik mit niedriger Übergabe. Hinweis: Der Standardwert ist in der Regel nicht das gewünschte.blendTimeConstant(Standard 0): Ermöglicht eine reibungslose Batchschätzung mit den laufenden Statistikenepsilonist eine Bedingungskonstante, die der Varianz beim Berechnen der umgekehrten Standardabweichung hinzugefügt wird.useCntkEngine(Standard: true): Legen Sie dies so fest, dassfalsedie GPU-einzige CuDNN-Implementierung ausgewählt wird.
Rückgabewert
Die Batchnormalisierung input.
BESCHREIBUNG
BatchNormalization implementiert die in Papierbatch normalisierung beschriebene Technik: Beschleunigen der Tiefennetzwerkschulung durch Reduzierung der internen Covariate-Schicht (Sergey Ioffe, Christian Szegedy).
Kurz gesagt, es normalisiert Layerausgaben für jede Minibatch für jede Ausgabe (Feature) unabhängig und wendet affine Transformation an, um die Darstellung der Ebene beizubehalten. Dies gilt für Schicht input:
m = mean (input)
var = variance (input)
inputNorm = (input - mean)/sqrt (epsilon + var)
output = gamma * inputNorm + beta
wo gamma und beta sind trainierbare Parameter.
mean und variance werden von Schulungsdaten geschätzt. Im einfachsten Fall sind sie die Mittel- und Varianz des aktuellen Minibatchs während des Trainings. Stattdessen wird eine langfristige Schätzung verwendet.
Die langfristigen Schätzungen sind eine durch den Parameter angegebene normalizationTimeConstant Zeitkonstante (in Beispielen) eine version der Minibatchstatistik mit niedriger Pass-Filterung.
Ein Wert der 0 Mittel bedeutet, dass es keine exponentielle Glättung gibt und die Mittel-/Varianz immer gleich denen des letzten gesehenen Minibatchs ist.
Dies ist oft unerwünschter.
Stattdessen wird empfohlen, hier einen Wert von ein paar Tausend zu verwenden.
Der BatchNormalizationLayer{} Wrapper hat einen Standardwert von 5000.
Weitere Informationen zu Zeitkonstanten und exponentieller Glättung: https://en.wikipedia.org/wiki/Exponential_smoothing#Time_Constant
Da Minibatchstatistiken laut sein können, ermöglicht CNTK auch die Verwendung einer MAP-Schätzung (maximum-a-posteriori) während der Schulung, bei der die laufende langfristige Schätzung als vorheriges verwendet wird.
Die Gewichtung des Vorherigen wird durch den blendTimeConstant Parameter gesteuert.
Dies wurde jedoch bisher in unseren Experimenten nicht nützlich gefunden.
Beachten Sie, dass CNTK beide Zeitkonstanten automatisch festlegen, sodass nur das vorhandene Ausführungsmittel verwendet wird und dass sie nicht aktualisiert wird. Es gibt keine explizite Aktion, die vom Benutzer benötigt wird.
cuDNN-Implementierung
Standardmäßig verwendet diese Funktion eine CNTK Implementierung, die sowohl mit GPUs als auch mit CPUs funktioniert. Sie können die CuDNN-Implementierung verwenden, die leistungsfähiger ist. Beachten Sie jedoch, dass die CuDNN-Implementierung nicht alle Optionen unterstützt, und die Schulung erfordert eine GPU (CNTK stellt jedoch eine CPU-Emulation bereit, auch wenn Sie die CuDNN-Implementierung auswählen).