Spec-Zone.ru › TensorFlow 2.4

tf.compat.v1.keras.layers.BatchNormalization

Слой, нормализующий свои входные данные.

Наследуется от: Layer, Module

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

Форма выходных данных: Такая же, как форма входных данных.

Ссылка:

  • 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.4/api_docs/python/tf/compat/v1/keras/layers/BatchNormalization

Spec-Zone.ru

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