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.
Нормализация по батчу отличается от других слоёв по нескольким ключевым аспектам:
1) Добавление BatchNormalization со training=True в модель приводит к тому, что результат одного примера зависит от содержимого всех других примеров в мини-батче. Будьте осторожны при добавлении данных в батч или при маске примеров, так как это может изменить статистику мини-батча и повлиять на другие примеры.
2) Обновления весов (перемещаемой статистики) основаны на прямом проходе модели, а не на результатах вычислений градиента.
3) При выполнении вывода с помощью модели, содержащей нормализацию по батчу, обычно (хотя и не всегда) желательно использовать накопленную статистику, а не статистику мини-батча. Это достигается путём передачи training=False при вызове модели или путём использования model.predict.
| Аргументы | |
|---|---|
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 | Целое число. По умолчанию virtual_batch_size равняется None, что означает, что нормализация по батчу выполняется по всему батчу. Когда virtual_batch_size не равняется None, вместо этого выполняется "Ghost Batch Normalization", которая создаёт виртуальные подбатчи, которые каждый нормализуется отдельно (с общими гамма, бета и скользящей статистикой). Должен делить фактический размер батча во время выполнения. |
adjustment | Функция, принимающая Tensor, содержащий (динамическую) форму входного тензора и возвращающая пару (масштаб, смещение) для применения к нормализованным значениям (перед гамма и бета), только во время обучения. Например, если 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 (с независимым масштабированием и смещением для каждого признака, но общий для всех примеров), и, наконец, применять гамма и/или бета. Если None, никакой корректировки не применяется. Не может быть указано, если задан virtual_batch_size. |
Аргументы вызова:
-
inputs: Входной тензор (любого ранга). -
training: Булево значение Python, указывающее, должен ли слой вести себя в режиме обучения или в режиме вывода.-
training=True: Слой будет нормализовать свои входные данные, используя среднее и дисперсию текущего батча входных данных. -
training=False: Слой будет нормализовать свои входные данные, используя среднее и дисперсию скользящей статистики, выученной во время обучения.
-
Форма входных данных: Произвольная. Используйте ключевой аргумент input_shape (кортеж целых чисел, не включающий ось примеров) при использовании этого слоя как первого слоя в модели. Форма выходных данных: Такая же, как у входных данных.
Уравнения нормализации: Рассмотрим промежуточные активации (x) мини-батча размером \(m\): Мы можем вычислить среднее и дисперсию батча \({\mu_B} = \frac{1}{m} \sum_{i=1}^{m} {x_i}\) \({\sigma_B^2} = \frac{1}{m} \sum_{i=1}^{m} ({x_i} - {\mu_B})^2\) и затем вычислить нормализованное \(x\), включая небольшой фактор \({\epsilon}\) для числовой устойчивости. \(\hat{x_i} = \frac{x_i - \mu_B}{\sqrt{\sigma_B^2 + \epsilon} }\) И, наконец, \(\hat{x}\) линейно преобразуется с помощью \({\gamma}\) и \({\beta}\), которые являются параметрами, подлежащими обучению: \({y_i} = {\gamma * \hat{x_i} + \beta}\) Ссылка:
© 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.3/api_docs/python/tf/compat/v1/keras/layers/BatchNormalization