Spec-Zone.ru › TensorFlow 2.3

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}\) Ссылка:

  • Ioffe и Szegedy, 2015.

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API