Szukaj…


Wprowadzenie

Z dokumentów :

„Normalizuje dane wejściowe, tak aby miały 0-średnią i / lub wariancję jednostki (1) w całej partii.

Ta warstwa oblicza normalizację partii zgodnie z opisem w [1].

[...]

[1] S. Ioffe i C. Szegedy, „Normalizacja partii: przyspieszenie głębokiego szkolenia w sieci poprzez ograniczenie wewnętrznej zmiany współzmiennej”. nadruk arXiv arXiv: 1502.03167 (2015). ”

Parametry

Parametr Detale
use_global_stats Ze stanowiska rohrbacha z 2 marca 2016 r. - może wie:
(use_global_stats) „Domyślnie w czasie szkolenia sieć oblicza globalne statystyki średniej / wariancji za pomocą średniej bieżącej, która jest następnie wykorzystywana w czasie testu, aby umożliwić deterministyczne wyniki dla każdego wejścia. Możesz ręcznie przełączać, czy sieć gromadzi, czy używa statystyk za pomocą opcji use_global_stats WAŻNE: aby ta funkcja działała, MUSISZ ustawić szybkość uczenia się na zero dla wszystkich trzech obiektów blob parametrów, tj. trzykrotnie param {lr_mult: 0} w definicji warstwy.
(use_global_stats) Oznacza to, że domyślnie (ponieważ w pliku batch_norm_layer.cpp podano poniżej), nie trzeba w ogóle ustawiać use_global_stats w prototxt. use_global_stats_ = this-> phase_ == TEST; "

Prototxt do treningu

Poniżej znajduje się przykładowa definicja szkolenia warstwy BatchNorm ze skalą i odchyleniem w kanale. Zazwyczaj warstwa BatchNorm jest wstawiana między warstwy splotu i rektyfikacji. W tym przykładzie splot wyprowadziłby blob layerx a rektyfikacja otrzymałaby blob layerx-bn .

layer { bottom: 'layerx' top: 'layerx-bn' name: 'layerx-bn' type: 'BatchNorm'
  batch_norm_param {
    use_global_stats: false  # calculate the mean and variance for each mini-batch
    moving_average_fraction: .999  # doesn't effect training 
  }
  param { lr_mult: 0 } 
  param { lr_mult: 0 } 
  param { lr_mult: 0 }}
# channel-wise scale and bias are separate
layer { bottom: 'layerx-bn' top: 'layerx-bn' name: 'layerx-bn-scale' type: 'Scale',
  scale_param { 
    bias_term: true
    axis: 1      # scale separately for each channel
    num_axes: 1  # ... but not spatially (default)
    filler { type: 'constant' value: 1 }           # initialize scaling to 1
    bias_filler { type: 'constant' value: 0.001 }  # initialize bias
}}

Więcej informacji można znaleźć w tym wątku .

Prototxt dla wdrożenia

Główną potrzebną zmianą jest przełączenie use_global_stats na true . Przełącza się to na użycie średniej ruchomej.

layer { bottom: 'layerx' top: 'layerx-bn' name: 'layerx-bn' type: 'BatchNorm'
  batch_norm_param {
    use_global_stats: true  # use pre-calculated average and variance
  }
  param { lr_mult: 0 } 
  param { lr_mult: 0 } 
  param { lr_mult: 0 }}
# channel-wise scale and bias are separate
layer { bottom: 'layerx-bn' top: 'layerx-bn' name: 'layerx-bn-scale' type: 'Scale',
  scale_param { 
    bias_term: true
    axis: 1      # scale separately for each channel
    num_axes: 1  # ... but not spatially (default)
}}


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow