tf.compat.v1.keras.layers.BatchNormalization
Слой, нормализующий свои входные данные.
tf.compat.v1.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.
Важно, что бачная нормализация работает по-разному во время обучения и во время вывода.
Во время обучения (т. е. при использовании fit() или при вызове слоя/модели с аргументом training=True), слой нормализует свой выход с помощью среднего и стандартного отклонения текущей порции входных данных. То есть для каждого канала, подвергаемого нормализации, слой возвращает (batch - mean(batch)) / (var(batch) + epsilon) * gamma + beta, где:
-
epsilon- небольшая константа (настраивается в качестве аргумента конструктора) -
gamma- это вычисляемый коэффициент масштабирования (инициализирован как 1), который можно отключить, передавscale=Falseв конструктор. -
beta- это вычисляемый коэффициент смещения (инициализирован как 0), который можно отключить, передавcenter=Falseв конструктор.
Во время вывода (т. е. при использовании evaluate() или predict() или при вызове слоя/модели с аргументом training=False (по умолчанию), слой нормализует свой выход с помощью скользящего среднего значения среднего и стандартного отклонения порций, увиденных во время обучения. То есть он возвращает (batch - self.moving_mean) / (self.moving_var + epsilon) * gamma + 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 в BatchNormalization. |
momentum | Момент для скользящего среднего. |
epsilon | Небольшое число, добавляемое к дисперсии, чтобы избежать деления на ноль. |
center | Если True, добавляет смещение beta к нормализованному тензору. Если False, beta игнорируется. |
scale | Если True, умножает на gamma. Если False, gamma не используется. Когда следующий слой является линейным (например, nn.relu), это можно отключить, так как масштабирование будет выполнено следующим слоем. |
beta_initializer | Инициализатор для веса бета. |
gamma_initializer | Инициализатор для веса гамма. |
moving_mean_initializer | Инициализатор для скользящего среднего. |
moving_variance_initializer | Инициализатор для скользящей дисперсии. |
beta_regularizer | Необязательный регуляризатор для веса бета. |
gamma_regularizer | Необязательный регуляризатор для веса гамма. |
beta_constraint | Необязательное ограничение для веса бета. |
gamma_constraint | Необязательное ограничение для веса гамма. |
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 | если None или True, использовать более быструю, объединенную реализацию, если возможно. Если False, использовать рекомендуемую системой реализацию. |
trainable | Булево значение, если True переменные будут помечены как обучаемые. |
virtual_batch_size | Функция, принимающая int, содержащую (динамическую) форму входного тензора, и возвращающая пару (масштаб, смещение) для применения к нормализованным значениям (до гамма и бета), только во время обучения. Например, если ось == -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 (с независимым масштабированием и смещением для каждого признака, но общим для всех примеров), а затем применять гамма и/или бета. Если None, никакой корректировки не выполняется. Не может быть указан, если задан virtual_batch_size. |
Аргументы вызова:
-
inputs: Входной тензор (любого ранга). -
training: Булево значение Python, указывающее, должен ли слой вести себя в режиме обучения или в режиме вывода.-
training=True: Слой будет нормализовывать свои входные данные с помощью среднего и дисперсии текущей порции входных данных. -
training=False: Слой будет нормализовывать свои входные данные с помощью среднего и дисперсии своих скользящих статистических данных, вычисленных во время обучения.
-
Форма входных данных: Произвольная. Используйте ключевой аргумент input_shape (кортеж целых чисел, не включая ось образцов) при использовании этого слоя в качестве первого слоя в модели.
Форма выходных данных: Такая же, как форма входных данных.
Ссылка:
© 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.4/api_docs/python/tf/compat/v1/keras/layers/BatchNormalization