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), слой нормализует свой вывод, используя среднее и стандартное отклонение текущей порции входных данных. То есть для каждого нормализуемого канала слой возвращает 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 в BatchNormalization. |
momentum | Импульс для скользящей средней. |
epsilon | Малое число с плавающей запятой, добавляемое к дисперсии для предотвращения деления на ноль. |
center | Если True, добавляет смещение beta к нормализованному тензору. Если False, beta игнорируется. |
scale | Если True, умножает на gamma. Если False, gamma не используется. Когда следующий слой линейный (например, nn.relu), это можно отключить, так как масштабирование будет выполнено следующим слоем. |
beta_initializer | Инициализатор для веса beta. |
gamma_initializer | Инициализатор для веса gamma. |
moving_mean_initializer | Инициализатор для скользящего среднего. |
moving_variance_initializer | Инициализатор для скользящей дисперсии. |
beta_regularizer | Необязательный регуляризатор для веса beta. |
gamma_regularizer | Необязательный регуляризатор для веса gamma. |
beta_constraint | Необязательное ограничение для веса beta. |
gamma_constraint | Необязательное ограничение для веса gamma. |
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 | Если True, использовать более быструю, объединённую реализацию, или поднять ValueError, если объединённая реализация не может быть использована. Если None, использовать более быструю реализацию, если возможно. Если False, не использовать объединённую реализацию. Обратите внимание, что в TensorFlow 1.x значение fused=True отличается: если False, слой использует рекомендуемую системой реализацию. |
trainable | Булево, если True переменные будут помечены как обучимые. |
virtual_batch_size | int. По умолчанию, virtual_batch_size — None, что означает, что базовая нормализация по батчам выполняется по всему батчу. Когда virtual_batch_size не None, вместо этого выполняется "Ghost Batch Normalization", который создаёт виртуальные подбатчи, каждый из которых нормализуется отдельно (с общими gamma, beta и скользящей статистикой). Необходимо разделить фактический размер батча во время выполнения. |
adjustment | Функция, принимающая Tensor, содержащую (динамическую) форму тензора входных данных, и возвращающая пару (масштаб, смещение), которая должна быть применена к нормализованным значениям (до gamma и beta), только во время обучения. Например, если axis=-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 (с независимым масштабированием и смещением для каждого признака, но общими для всех примеров), а затем применять gamma и/или beta. Если None, никаких корректировок не применяется. Не может быть указано, если указан virtual_batch_size. |
Аргументы вызова:
-
inputs: Входной тензор (любого ранга). -
training: Булево значение Python, указывающее, должен ли слой вести себя в режиме обучения или в режиме вывода.-
training=True: Слой нормализует свои входные данные, используя среднее и дисперсию текущей порции входных данных. -
training=False: Слой нормализует свои входные данные, используя среднее и дисперсию своих скользящих статистик, изученных во время обучения.
-
Форма входных данных: произвольная. Используйте ключевой аргумент input_shape (кортеж целых чисел, не включая ось образцов) при использовании этого слоя в качестве первого слоя в модели.
Форма выходных данных: такая же, как у входных данных.
Ссылка:
© 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/versions/r2.9/api_docs/python/tf/compat/v1/keras/layers/BatchNormalization