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
)
Используется в блокнотах
| Используется в руководстве | Используется в учебных материалах |
|---|---|
Пакетная нормализация применяет преобразование, поддерживающее среднее выходных данных около 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, указывающее, должен ли слой работать в режиме обучения или инференса.
|
mask | Двоичный тензор с формой, допускающей broadcasting с тензором inputs; значения True указывают позиции, для которых следует вычислить среднее значение и дисперсию. Маскированные элементы текущих входных данных не учитываются при вычислении среднего значения и дисперсии во время обучения. Значения предыдущих немаскированных элементов будут учитываться до истечения срока их действия, определяемого коэффициентом затухания. |
Ссылка:
О настройке 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