Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
BatchNormalization(input, scale, bias, runMean, runVariance, spatial,
normalizationTimeConstant = 0,
blendTimeConstant = 0, epsilon = 0.00001, useCntkEngine = true)
Parametry
inputje vstup uzlu dávkové normalizace.scaleje parametrtensor{} , který obsahuje naučené faktory škálování v komponentách (gammatermín v následující rovnici).biasje parametrtensor{} , který obsahuje naučené předsudky (betatermín).scaleabiasmusí mít stejné rozměry, které se musí rovnatinputdimenzím v případěspatial = falsenebo počtu výstupních konvolučních map v případěspatial = true.runMeanje průběžný průměr, který se používá během fáze vyhodnocení a může se použít i během trénování. ParametrTensor{} musíte předat se stejnými dimenzemi jakoscaleabias, počáteční hodnota 0 alearningRateMultiplier=0nastavit.runVarianceje spuštěná odchylka. Je reprezentován stejným způsobem jakorunMean.spatialje příznak, který určuje, zda se má vypočítat průměr nebo var pro každou funkci v minibatchu nezávisle nebo v případě konvolučních vrstev na mapě funkcí.normalizationTimeConstant(výchozí hodnota 0): časová konstanta pro výpočet průměrného průměru a odchylky jako vyfiltrované verze dávkové statistiky s nízkým průchodem. Poznámka: Výchozí hodnota obvykle není to, co chcete.blendTimeConstant(výchozí 0): umožňuje hladké odhady dávek se spuštěnými statistikami.epsilonje kondiční konstanta přidaná k rozptylu při výpočtu inverzní směrodatné odchylky.useCntkEngine(výchozí hodnota: true): Nastavte ji tak, abyfalsese vybrala implementace jen pro GPU cuDNN.
Vrácená hodnota
Dávkové normalizované input.
Description
BatchNormalization implementuje techniku popsanou v dávkové normalizaci: Zrychlení hlubokého síťového trénování snížením interního kovariantového posunu (Sergey Ioffe, Christian Szegedy).
Stručně řečeno, normalizuje výstupy vrstvy pro každý minibatch pro každý výstup (funkce) nezávisle a použije affine transformace pro zachování reprezentace vrstvy. To znamená, že pro vrstvu input:
m = mean (input)
var = variance (input)
inputNorm = (input - mean)/sqrt (epsilon + var)
output = gamma * inputNorm + beta
kde gamma a beta jsou vytrénovatelné parametry.
mean a variance odhadují se z trénovacích dat. V nejjednodušším případě jsou střední hodnotou a odchylkou aktuálního minibatchu během trénování. Odvozováním se místo toho použije dlouhodobý odhad.
Dlouhodobé odhady představují nízko pass-filtrovanou verzi statistiky minibatchu s časovou konstantou (v ukázkách) danou parametrem normalizationTimeConstant .
Hodnota 0 znamená, že nedojde k exponenciálnímu vyhlazování a spuštění střední hodnoty a rozptylu bude vždy rovna hodnotám posledního viditelného minibatchu.
To je často nežádoucí.
Místo toho se doporučuje použít hodnotu pár tisíc.
Obálka BatchNormalizationLayer{} má výchozí hodnotu 5000.
Další informace o časových konstantách a exponenciálním vyhlazování: https://en.wikipedia.org/wiki/Exponential_smoothing#Time_Constant
Vzhledem k tomu, že minibatch statistiky mohou být hlučné, CNTK také umožňuje použít odhad MAP (maximum-a-posteriori) během trénování, kde se průběžný dlouhodobý odhad bere jako předchozí.
Hmotnost předchozího parametru blendTimeConstant řídí.
V našich experimentech to ale zatím nebylo užitečné.
Všimněte si, že během odvození nastaví CNTK obě časové konstanty automaticky tak, aby se používaly pouze existující spuštěné střední hodnoty a že se neaktualizuje. Uživatel nevyžaduje žádnou explicitní akci.
Implementace cuDNN
Ve výchozím nastavení tato funkce používá implementaci CNTK, která funguje s grafickými procesory i procesory. Můžete se rozhodnout použít implementaci cuDNN, což je výkonnější. Mějte však na paměti, že implementace cuDNN nepodporuje všechny možnosti a trénování vyžaduje GPU (CNTK ale poskytuje emulaci procesoru pro odvozování i v případě, že vyberete implementaci cuDNN).