Spec-Zone.ru › TensorFlow 2.9

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

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

Ссылка:

  • Ioffe и Szegedy, 2015.

© 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

Spec-Zone.ru

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