Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
BatchNormalization(input, scale, bias, runMean, runVariance, spatial,
normalizationTimeConstant = 0,
blendTimeConstant = 0, epsilon = 0.00001, useCntkEngine = true)
Parametry
inputto dane wejściowe węzła normalizacji partiiscalejest parametrem ParameterTensor{} , który zawiera poznane czynniki skalowania składników (gammatermin w równaniu poniżej).biasjest parametrem ParameterTensor{} , który przechowuje poznane odchylenie (betatermin).scaleibiasmuszą mieć te same wymiary, które muszą być równeinputwymiarom w przypadkuspatial = falsemap funkcji konwolucji wyjściowej lub w przypadkuspatial = true.runMeanto średnia bieżąca, która jest używana podczas fazy oceny i może być również używana podczas trenowania. Należy przekazać parametrTensor{} o tych samych wymiarach coscaleibias, wartość początkowa 0 ilearningRateMultiplier=0ustawiona.runVariancejest uruchomioną wariancją. Jest ona reprezentowana w taki sam sposób jakrunMean.spatialto flaga określająca, czy obliczyć średnią/var dla każdej funkcji w minibatch niezależnie, czy w przypadku warstw splotowych na mapę cech.normalizationTimeConstant(wartość domyślna 0): stała czasowa obliczania średniej średniej i wariancji jako przefiltrowanej wersji statystyki wsadowej o niskim przebiegu. Uwaga: wartość domyślna zazwyczaj nie jest odpowiednia.blendTimeConstant(wartość domyślna 0): umożliwia wygładzanie oszacowań wsadowych przy użyciu uruchomionych statystykepsilonjest stałą warunekatora dodaną do wariancji podczas obliczania odwrotnego odchylenia standardowego.useCntkEngine(wartość domyślna: true): ustaw tę wartość na ,falseaby wybrać implementację cuDNN tylko z procesorem GPU
Wartość zwracana
Znormalizowane wsadowo input.
Opis
BatchNormalization implementuje technikę opisaną w artykule Normalizacja partii: przyspieszanie głębokiego trenowania sieci poprzez zmniejszenie wewnętrznej zmiany zmian (Sergey Ioffe, Christian Szegedy).
Krótko mówiąc, normalizuje dane wyjściowe warstwy dla każdego minibatcha dla każdego wyjścia (funkcji) niezależnie i stosuje przekształcenia affine w celu zachowania reprezentacji warstwy. Oznacza to, że dla warstwy input:
m = mean (input)
var = variance (input)
inputNorm = (input - mean)/sqrt (epsilon + var)
output = gamma * inputNorm + beta
gdzie gamma i beta są parametrami do trenowania.
mean i variance są szacowane na podstawie danych treningowych. W najprostszym przypadku są to średnia i wariancja bieżącego minibatcha podczas trenowania. Wywnioskowość jest używana zamiast tego długoterminowe oszacowanie.
Długoterminowe oszacowania to przefiltrowana niskoprzepustowo wersja statystyk minibatch, ze stałą czasu (w próbkach) podaną normalizationTimeConstant przez parametr .
Wartość 0 oznacza, że nie będzie wygładzania wykładniczego, a średnia/wariancja będzie zawsze równa wartości ostatniej widocznej minibatch.
Jest to często niepożądane.
Zamiast tego zaleca się użycie wartości kilku tysięcy w tym miejscu.
Otoka BatchNormalizationLayer{} ma wartość domyślną 5000.
Aby uzyskać więcej informacji na temat stałych czasu i wygładzania wykładniczego: https://en.wikipedia.org/wiki/Exponential_smoothing#Time_Constant
Ponieważ statystyki minibatch mogą być hałaśliwy, CNTK umożliwia również użycie oszacowania MAP (maximum a-posteriori) podczas trenowania, w którym długotrwałe oszacowanie jest traktowane jako poprzednie.
Waga poprzedniego jest kontrolowana blendTimeConstant przez parametr .
Nie znaleziono jednak tego przydatnego do tej pory w naszych eksperymentach.
Należy pamiętać, że podczas wnioskowania CNTK ustawi obie stałe czasu automatycznie, tak aby używać tylko istniejącej średniej uruchomionej i że nie jest aktualizowana. Użytkownik nie wymaga jawnej akcji.
implementacja cuDNN
Domyślnie ta funkcja używa implementacji CNTK, która współdziała zarówno z procesorami GPU, jak i procesorami CPU. Możesz użyć implementacji cuDNN, która jest bardziej wydajna. Należy jednak pamiętać, że implementacja cuDNN nie obsługuje wszystkich opcji, a trenowanie wymaga procesora GPU (CNTK jednak zapewnia emulację procesora CPU na potrzeby wnioskowania, nawet jeśli wybrano implementację cuDNN).