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 Инициализатор веса beta.
gamma_initializer Инициализатор веса gamma.
moving_mean_initializer Инициализатор скользящего среднего.
moving_variance_initializer Инициализатор скользящей дисперсии.
beta_regularizer Необязательный регуляризатор веса beta.
gamma_regularizer Необязательный регуляризатор веса gamma.
beta_constraint Необязательное ограничение для веса beta.
gamma_constraint Необязательное ограничение для веса gamma.
synchronized Применимо только при использовании бэкенда TensorFlow. Если True, на каждом шаге обучения синхронизирует глобальную статистику пакетов (среднее значение и дисперсию) для слоя на всех устройствах в рамках стратегии распределённого обучения. Если False, каждая реплика использует собственную локальную статистику пакетов.
**kwargs Именованные аргументы базового слоя (например, name и dtype).
Аргументы вызова
inputs Входной тензор (любого ранга).
training Логическое значение Python, указывающее, должен ли слой работать в режиме обучения или инференса.
  • training=True: слой будет нормализовать входные данные, используя среднее значение и дисперсию текущего пакета входных данных.
  • training=False: слой будет нормализовать входные данные, используя среднее значение и дисперсию скользящих статистических показателей, полученных во время обучения.
mask Двоичный тензор с формой, допускающей broadcasting с тензором 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 и позволяет создать такой же слой из словаря конфигурации. Он не обрабатывает связи между слоями (это делает Network) и веса (это делает 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