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 | Инициализатор для веса бета. |
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, указывающая, должен ли слой работать в режиме обучения или в режиме вывода.
|
mask | Бинарный тензор формы, совместимой с вектором 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, способным восстановить тот же слой из словаря конфигурации. Он не обрабатывает соединение слоев (это обрабатывает сеть), а также веса (это обрабатывает 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