Spec-Zone.ru › TensorFlow

tf.keras.layers.BatchNormalization

Слой, нормализующий свои входные данные.

Наследуется от: Layer, Operation

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,
    synchronized=False,
    **kwargs
)

Используется в ноутбуках

Используется в руководстве Используется в учебниках
  • Эффективный Tensorflow 2
  • Расширенная автоматическая дифференциация
  • Обрезка для вывода на устройстве с XNNPACK
  • Редкие веса с помощью структурной обрезки
  • Настраиваемые слои
  • Глубокая сверточная генеративно-состязательная сеть
  • pix2pix: Перевод изображений в изображения с помощью условной GAN
  • Распределенное обучение с DTensors

Базовая нормализация применяет преобразование, которое поддерживает среднее значение вывода близким к 0, а стандартное отклонение вывода близким к 1.

Важно, что базовая нормализация работает по-разному во время обучения и во время вывода.

Во время обучения (т.е. при использовании fit() или при вызове слоя/модели с аргументом training=True), слой нормализует свой вывод, используя среднее значение и стандартное отклонение текущей порции входных данных. Это означает, что для каждого канала, который нормализуется, слой возвращает gamma * (batch - mean(batch)) / sqrt(var(batch) + epsilon) + beta, где:

  • epsilon - небольшая константа (настраиваемая как часть аргументов конструктора)
  • gamma - это обучаемый коэффициент масштабирования (инициализирован как 1), который можно отключить, передав scale=False конструктору.
  • beta - это обучаемый коэффициент смещения (инициализирован как 0), который можно отключить, передав center=False конструктору.

Во время вывода (т.е. при использовании evaluate() или predict() или при вызове слоя/модели с аргументом training=False (что является значением по умолчанию), слой нормализует свой вывод, используя скользящее среднее значение среднего и стандартного отклонения порций, которые он видел во время обучения. То есть, он возвращает gamma * (batch - self.moving_mean) / sqrt(self.moving_var+epsilon) + beta.

self.moving_mean и self.moving_var являются неизменяемыми переменными, которые обновляются каждый раз, когда слой вызывается в режиме обучения, таким образом:

  • moving_mean = moving_mean * momentum + mean(batch) * (1 - momentum)
  • moving_var = moving_var * momentum + var(batch) * (1 - momentum)

Таким образом, слой будет нормализовать свои входные данные только во время вывода после того, как он был обучен на данных, которые имеют аналогичные статистические характеристики, как и данные вывода.

Аргументы
axis Целое число, ось, которая должна быть нормализована (обычно ось признаков). Например, после слоя Conv2D с data_format="channels_first" используйте axis=1.
momentum Импульс для скользящего среднего.
epsilon Небольшое число, добавляемое к дисперсии для предотвращения деления на ноль.
center Если True, добавляет смещение beta к нормализованному тензору. Если False, beta игнорируется.
scale Если True, умножает на gamma. Если False, gamma не используется. Когда следующий слой является линейным, это можно отключить, так как масштабирование будет выполнено следующим слоем.
beta_initializer Инициализатор для веса бета.
gamma_initializer Инициализатор для веса гамма.
moving_mean_initializer Инициализатор для скользящего среднего.
moving_variance_initializer Инициализатор для скользящей дисперсии.
beta_regularizer Необязательный регуляризатор для веса бета.
gamma_regularizer Необязательный регуляризатор для веса гамма.
beta_constraint Необязательное ограничение для веса бета.
gamma_constraint Необязательное ограничение для веса гамма.
synchronized Применимо только с бэкэндом TensorFlow. Если True, синхронизирует глобальную статистику порций (среднее и дисперсия) для слоя по всем устройствам на каждом шаге обучения в стратегии распределенного обучения. Если False, каждая реплика использует свою локальную статистику порций.
**kwargs Аргументы ключевого слова базового слоя (например, name и dtype).
Аргументы вызова
inputs Входной тензор (любого ранга).
training Булева переменная Python, указывающая, должен ли слой работать в режиме обучения или в режиме вывода.
  • training=True: Слой будет нормализовать свои входные данные, используя среднее и дисперсию текущей порции входных данных.
  • training=False: Слой будет нормализовать свои входные данные, используя среднее и дисперсию своей скользящей статистики, полученной во время обучения.
mask Бинарный тензор формы, совместимой с вектором inputs, где значения True указывают позиции, для которых следует вычислять среднее и дисперсию. Маскированные элементы текущих входных данных не учитываются при вычислении среднего и дисперсии во время обучения. Любые предыдущие значения без маскировки будут учитываться до истечения срока их импульса.

Ссылка:

  • Ioffe и Szegedy, 2015.

О настройке layer.trainable = False на слое BatchNormalization:

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

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

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

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

  • Установка trainable на модели, содержащей другие слои, рекурсивно установит значение trainable всех внутренних слоев.
  • Если значение атрибута trainable изменяется после вызова compile() на модели, новое значение не вступает в силу для этой модели до тех пор, пока не будет снова вызван compile().
Атрибуты
input Извлекает тензор(ы) входных данных символической операции.

Возвращает только тензор(ы), соответствующие первому вызову операции.

output Извлекает тензор(ы) выходных данных слоя.

Возвращает только тензор(ы), соответствующие первому вызову операции.

Методы

from_config

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

@classmethod
from_config(
    config
)

Создает слой из его конфигурации.

Этот метод является обратным для get_config, способным восстановить тот же слой из словаря конфигурации. Он не обрабатывает соединение слоев (это обрабатывает сеть), а также веса (это обрабатывает set_weights).

Аргументы
config Словарь Python, обычно результат get_config.
Возвращает
Экземпляр слоя.

symbolic_call

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

symbolic_call(
    *args, **kwargs
)

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

Spec-Zone.ru

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