Spec-Zone.ru › TensorFlow 2.3

tf.keras.layers.BatchNormalization

Просмотреть исходный код на GitHub

Нормализует и масштабирует входные данные или активации.

tf.keras.layers.BatchNormalization(
    axis=-1, momentum=0.99, epsilon=0.001, center=True, scale=True,
    beta_initializer='zeros', gamma_initializer='ones',
    moving_mean_initializer='zeros', moving_variance_initializer='ones',
    beta_regularizer=None, gamma_regularizer=None, beta_constraint=None,
    gamma_constraint=None, renorm=False, renorm_clipping=None, renorm_momentum=0.99,
    fused=None, trainable=True, virtual_batch_size=None, adjustment=None, name=None,
    **kwargs
)

Нормализует активации предыдущего слоя в каждой пачке, т.е. применяет преобразование, которое сохраняет среднее значение активации близким к 0, а стандартное отклонение активации близким к 1.

Нормализация по батчам отличается от других слоёв по нескольким ключевым аспектам:

1) Добавление BatchNormalization с training=True в модель приводит к тому, что результат одного примера зависит от содержимого всех других примеров в мини-пачке. Будьте внимательны при добавлении пачек или маскировании примеров, так как это может изменить статистику мини-пачки и повлиять на другие примеры.

2) Обновления весов (подвижные статистики) основаны на прямом проходе модели, а не на результате вычисления градиентов.

3) При выполнении вывода с помощью модели, содержащей нормализацию по батчам, обычно (хотя и не всегда) желательно использовать накопленные статистические данные, а не статистические данные мини-пачки. Это достигается путём передачи training=False при вызове модели или использования model.predict.

Аргументы
axis Целое число, ось, которая должна быть нормализована (обычно ось признаков). Например, после слоя Conv2D со значением data_format="channels_first", установите axis=1 в BatchNormalization.
momentum Момент для скользящей средней.
epsilon Малое значение с плавающей точкой, добавляемое к дисперсии для предотвращения деления на ноль.
center Если True, добавляет смещение beta к нормализованному тензору. Если False, beta игнорируется.
scale Если True, умножает на gamma. Если False, gamma не используется. Когда следующий слой является линейным (например, nn.relu), это можно отключить, так как масштабирование будет выполнено следующим слоем.
beta_initializer Инициализатор для веса beta.
gamma_initializer Инициализатор для веса gamma.
moving_mean_initializer Инициализатор для скользящего среднего.
moving_variance_initializer Инициализатор для скользящей дисперсии.
beta_regularizer Необязательный регуляризатор для веса beta.
gamma_regularizer Необязательный регуляризатор для веса gamma.
beta_constraint Необязательное ограничение для веса beta.
gamma_constraint Необязательное ограничение для веса gamma.
renorm Использовать Batch Renormalization. Это добавляет дополнительные переменные во время обучения. Вывод одинаков для любого значения этого параметра.
renorm_clipping Словарь, который может сопоставлять ключи 'rmax', 'rmin', 'dmax' со скалярными Tensors для ограничения коррекции renorm. Коррекция (r, d) используется как corrected_value = normalized_value * r + d, с r ограничена [rmin, rmax], а d - [-dmax, dmax]. Отсутствующие rmax, rmin, dmax устанавливаются соответственно в inf, 0, inf.
renorm_momentum Момент, используемый для обновления скользящих средних и стандартных отклонений с renorm. В отличие от momentum, это влияет на обучение и не должно быть слишком маленьким (что добавит шума) или слишком большим (что даст устаревшие оценки). Обратите внимание, что momentum всё ещё применяется для получения средних и дисперсий для вывода.
fused если True, использовать более быструю, объединённую реализацию, или поднять ValueError, если объединённая реализация не может быть использована. Если None, использовать более быструю реализацию, если возможно. Если False, не использовать объединённую реализацию.
trainable Булево значение, если True, переменные будут помечены как обучаемые.
virtual_batch_size Целое число. По умолчанию virtual_batch_size равно None, что означает, что нормализация по батчам выполняется для всей пачки. Когда virtual_batch_size не равно None, вместо этого выполняется "Ghost Batch Normalization", которая создаёт виртуальные подпачки, которые нормализуются по отдельности (с общими gamma, beta и подвижными статистиками). Необходимо разделить фактический размер пачки во время выполнения.
adjustment Функция, принимающая Tensor, содержащую (динамическую) форму входного тензора, и возвращающая пару (масштаб, смещение) для применения к нормализованным значениям (до gamma и beta), только во время обучения. Например, если ось==-1, adjustment = lambda shape: ( tf.random.uniform(shape[-1:], 0.93, 1.07), tf.random.uniform(shape[-1:], -0.1, 0.1)) будет масштабировать нормализованное значение до 7% вверх или вниз, затем сместит результат до 0,1 (с независимым масштабированием и смещением для каждого признака, но общим для всех примеров), а затем применить gamma и/или beta. Если None, никакое изменение не применяется. Не может быть указано, если задан virtual_batch_size.

Аргументы вызова:

  • inputs: Входной тензор (любого ранга).
  • training: Булево значение Python, указывающее, должен ли слой вести себя в режиме обучения или в режиме вывода.
    • training=True: Слой будет нормализовать свои входные данные с использованием среднего и дисперсии текущей пачки входных данных.
    • training=False: Слой будет нормализовать свои входные данные с использованием среднего и дисперсии своих скользящих статистик, выученных во время обучения.

Форма входных данных: произвольная. Используйте ключевой аргумент input_shape (кортеж целых чисел, не включает ось примеров) при использовании этого слоя в качестве первого слоя в модели. Форма выходных данных: такая же, как у входных данных.
О настройке layer.trainable = False в слое `BatchNormalization`:

Установка значения layer.trainable = False означает замораживание слоя, т.е. его внутреннее состояние не будет изменяться во время обучения: его обучаемые веса не будут обновляться во время fit() или train_on_batch(), и его обновления состояния не будут выполняться.

Обычно это не обязательно означает, что слой выполняется в режиме вывода (что обычно контролируется аргументом training который может быть передан при вызове слоя). «Замороженное состояние» и «режим вывода» — это два разных понятия.

Однако в случае слоя BatchNormalization настройка trainable = False на слое означает, что слой будет впоследствии выполняться в режиме вывода (что означает, что он будет использовать скользящее среднее и скользящую дисперсию для нормализации текущей пачки, а не среднее и дисперсию текущей пачки).

Это поведение было введено в TensorFlow 2.0, чтобы обеспечить layer.trainable = False для получения наиболее ожидаемого поведения в случае тонкой настройки свёрточной сети.

Обратите внимание:

  • Это поведение наблюдается только начиная с TensorFlow 2.0. В версии 1.*, установка layer.trainable = False заморозит слой, но не переключит его в режим вывода.
  • Установка trainable в модели, содержащей другие слои, рекурсивно установит значение trainable для всех внутренних слоёв.
  • Если значение атрибута trainable изменяется после вызова compile() в модели, новое значение не будет применено для этой модели до тех пор, пока compile() не будет вызван снова.

Уравнения нормализации: Рассмотрим промежуточные активации (x) мини-пачки размером \(m\): Мы можем вычислить среднее и дисперсию пачки \({\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\) и затем вычислить нормализованное \(x\), включая небольшой множитель \({\epsilon}\) для числовой устойчивости. \(\hat{x_i} = \frac{x_i - \mu_B}{\sqrt{\sigma_B^2 + \epsilon} }\) И, наконец, \(\hat{x}\) линейно преобразуется с помощью \({\gamma}\) и \({\beta}\), которые являются обучаемыми параметрами: \({y_i} = {\gamma * \hat{x_i} + \beta}\) Ссылка:

  • Ioffe и Szegedy, 2015.

© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.3/api_docs/python/tf/keras/layers/BatchNormalization

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API