Ta strona została przetłumaczona przez Cloud Translation API.
Switch to English

tf.keras.layers.BatchNormalization

TensorFlow 1 wersja Zobacz źródło na GitHub

Normalizacja i wejścia lub aktywacje skalę.

Stosowany w notebookach

Używany w przewodniku Używany w samouczków

Normalizacji aktywacje poprzedniej warstwy w każdej partii, czyli zastosowanie transformacji, który utrzymuje średnią aktywacyjny bliskie 0 i odchylenie standardowe aktywacyjny zbliżona do 1.

różni się od innych partii normalizacja warstw w kilku kluczowych aspektach:

1) Dodawanie BatchNormalization z training=True do modelu wywołuje efekt jednego przykładu zależy od zawartości innych przykładach w minibatch. Bądź ostrożny, gdy dopełnienie partii lub maskowania przykłady, jak można zmienić te statystyki minibatch i wpływać na inne przykłady.

2) Aktualizacje ciężarów (statystyki ruchu) są oparte na podaniu modelu zamiast wyniku obliczeń gradientu.

3) Przy wykonywaniu wnioskowanie stosując model zawierający normalizację partii, to nie jest na ogół (choć zawsze) pożądane stosowanie skumulowanych statystyk zamiast statystyki mini-partii. Cel ten realizowany jest poprzez przepuszczanie training=False przy wywołaniu modelu, lub z użyciem model.predict .

axis Całkowita oś, która powinna być znormalizowane (typowo osi cechy). Na przykład, po Conv2D warstwy data_format="channels_first" , zbiór axis=1 w BatchNormalization .
momentum Pęd do średniej ruchomej.
epsilon Mały pływak dodany do wariancji, aby uniknąć dzielenia przez zero.
center Jeśli to prawda, dodać offset beta do znormalizowanej tensora. Jeśli False, beta jest ignorowany.
scale Jeśli to prawda, należy pomnożyć przez gamma . Jeśli False, gamma nie jest używany. Kiedy następna warstwa jest liniowy (również np nn.relu ), to może być wyłączone, ponieważ skalowanie zostanie wykonana przez następną warstwę.
beta_initializer Inicjator do ciężaru beta.
gamma_initializer Inicjator do ciężaru gamma.
moving_mean_initializer Inicjator dla ruchomej średniej.
moving_variance_initializer Inicjator dla ruchomego wariancji.
beta_regularizer Opcjonalnie regularizer do ciężaru beta.
gamma_regularizer Opcjonalnie regularizer do ciężaru gamma.
beta_constraint Opcjonalnie ograniczenie do ciężaru beta.
gamma_constraint Opcjonalnie ograniczenia do ciężaru gamma.
renorm Czy użyć Batch renormalizacja . To dodaje dodatkowe zmienne w czasie treningu. Wnioskowanie jest taka sama dla obu wartości tego parametru.
renorm_clipping Słownik które mogą odwzorowywać Keys rmax ', „rmin”, „Dmax” do skalarne Tensors stosowane do zaciskania korektę renorm. Korekcja (r, d) jest stosowany jako corrected_value = normalized_value * r + d , a r przycięty do Rmax, Rmin [] i d na [-dmax Dmax]. Brakuje rmax, rmin, Dmax są ustawione na 0, kalkulator, kalkulator, odpowiednio.
renorm_momentum Momentum wykorzystane do aktualizacji ruchome środki i odchylenia standardowe z renorm. W odróżnieniu od momentum , to wpływa na szkolenia i powinien być ani zbyt mała (co byłoby dodać szum), ani zbyt duża (co dałoby nieaktualne dane szacunkowe). Zauważ, że momentum jest nadal stosowana, aby uzyskać środki i wariancje dla wnioskowania.
fused jeśli True , należy użyć szybszego wdrażania, skondensowany, lub podnieść ValueError jeśli skondensowany realizacja nie może być używany. Jeśli None użyj szybszą realizację, jeśli to możliwe. Jeśli False, nie wykorzystał skondensowany realizację.
trainable Boolean, jeśli True zmienne zostaną oznaczone jako wyszkolić.
virtual_batch_size int . Domyślnie virtual_batch_size jest None , czyli partii normalizacja jest wykonywana na całej partii. Gdy virtual_batch_size Nie None zamiast wykonywania „widmowego Batch normalizacji”, który tworzy wirtualne cząstkowe partie z których każdy jest normalizowane oddzielnie (ze wspólną gamma, beta i ruchomych statystycznych). Musi podzielić rzeczywistej wielkości wsadu w trakcie realizacji.
adjustment Funkcja biorąc Tensor zawierający (dynamiczny) kształt tensora wejściowego i powrót parę (w skali, polaryzacji) w celu zastosowania do wartości znormalizowanych (przed beta i gamma) tylko podczas treningu. Na przykład, jeśli oś == - 1, adjustment = lambda shape: ( tf.random.uniform(shape[-1:], 0.93, 1.07), tf.random.uniform(shape[-1:], -0.1, 0.1)) skaluje znormalizowanej wartości o nie więcej niż 7%, w górę lub w dół, a następnie przesuwają się wynik o do 0,1 (niezależny skalowania i odchylenia dla każdej funkcji, ale te same we wszystkich przykładach), a na końcu stosuje się promieniowanie gamma i / lub beta. Jeśli None , korekta nie jest stosowana. Nie można określić, czy virtual_batch_size jest określona.

Połączeń argumenty:

  • inputs : tensor wejściowa (jakiegokolwiek stopnia).
  • training : Python logiczną wskazującą, czy warstwa powinna zachowywać się w trybie treningu lub w trybie wnioskowania.
    • training=True : Warstwa normalizuje jego wejścia za pomocą średniej i wariancji bieżącej partii wejść.
    • training=False : Warstwa normalizuje jego wejścia za pomocą średniej i wariancji jego ruchomych statystyk, nabytych podczas szkolenia.

Kształt wejścia: dowolna. Użyj słowa kluczowego argumentu input_shape (krotka liczb całkowitych, nie zawiera oś próbek) przy użyciu tej warstwy jako pierwsza warstwa w modelu. Wyjście kształt: sam kształt jak wejścia.
O ustawieniu layer.trainable = False na `warstwy BatchNormalization:

Znaczenie ustawienie layer.trainable = False jest zamrożenie warstwę, czyli jego wewnętrzny stan nie ulegnie zmianie w trakcie szkolenia: jego wyszkolić ciężary nie zostaną zaktualizowane podczas fit() lub train_on_batch() , i nie będą działać jego aktualizacje państwowe.

Zwykle jest to niekoniecznie oznacza, że warstwa jest prowadzony w trybie wnioskowania (który jest zwykle kontrolowany przez training argumentów, które mogą być przekazywane przy wywołaniu warstwę). „Zamrożonego stanu” i „tryb wnioskowania” to dwa odrębne pojęcia.

Jednak w przypadku BatchNormalization warstwy, ustawienie trainable = False na środkach warstwowych, że warstwa będzie następnie uruchomić w trybie wnioskowania (co oznacza, że będzie korzystać z ruchomego średnią i poruszającego wariancji normalizować bieżący partii, zamiast średnia i wariancja bieżącej partii).

To zachowanie zostało wprowadzone w TensorFlow 2.0, w celu umożliwienia layer.trainable = False produkować najbardziej powszechnie oczekiwane zachowanie w przypadku convnet użytku dostrajania.

Należy pamiętać, że:

  • Ten problem występuje tylko z TensorFlow 2.0. W 1. * ustawienie layer.trainable = False by zamrozić warstwy, ale nie przełączyć go w tryb wnioskowania.
  • Ustawianie trainable na modelu zawierającym inne warstwy rekurencyjnie ustawić trainable wartość wszystkich warstw wewnętrznych.
  • Jeśli wartość trainable atrybutu zostanie zmieniona po wywołaniu compile() na modelu, nowa wartość nie ma wpływu na ten model aż do compile() jest wywoływana ponownie.

Równania normalizacji: Rozważmy aktywacji pośrednich (X) mini partii wielkości \ (M \) możemy obliczyć średnią i wariancję partii \ ({\ mu_B} = \ Frac {1} {m} \ sum_ {i = 1} ^ {m} {x_i} \) \ ({\ sigma_B ^ 2} = \ Frac {1} {m} \ sum_ {i = 1} ^ {m} ({x_i} - {\ mu_B }) ^ 2 \), a następnie obliczyć normalizowany \ (x \), łącznie z małym współczynnikiem \ ({\} \ epsilon) stabilności numerycznej. \ (\ Kapelusz {x_i} = \ Frac {x_i - \ mu_B} {\ sqrt {\ sigma_B ^ 2 + \ epsilon}} \) i ostatecznie \ (\ kapelusz {x} \) jest liniowo przekształcony w \ ({\ y} \) i \ ({\ p} \), które są dowiedział parametry: \ ({y_i} = {\ y * \ kapelusz {x_i} + \ p} \) Numer referencyjny: