Spec-Zone.ru › TensorFlow 2.4

tf.compat.v1.layers.BatchNormalization

Слой пакетной нормализации из работы (Ioffe et al., 2015).

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

tf.compat.v1.layers.BatchNormalization(
    axis=-1, momentum=0.99, epsilon=0.001, center=True, scale=True,
    beta_initializer=tf.zeros_initializer(),
    gamma_initializer=tf.ones_initializer(),
    moving_mean_initializer=tf.zeros_initializer(),
    moving_variance_initializer=tf.ones_initializer(), 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
)

API Keras обрабатывает обновления пакетной нормализации для moving_mean и moving_variance в рамках своих циклов fit() и evaluate(). Однако, если используется пользовательский цикл обучения с экземпляром Model, эти обновления необходимо включать явно. Вот простой пример того, как это можно сделать:

# model is an instance of Model that contains BatchNormalization layer.
update_ops = model.get_updates_for(None) + model.get_updates_for(features)
train_op = optimizer.minimize(loss)
train_op = tf.group([train_op, update_ops])
Аргументы
axis Целое число или список целых чисел, ось или оси, которые должны быть нормализованы, обычно ось/оси признаков. Например, после слоя Conv2D с data_format="channels_first", задайте axis=1. Если указан список осей, каждая ось в axis будет нормализована одновременно. По умолчанию -1, что использует последнюю ось. Примечание: при использовании пакетной нормализации по нескольким осям переменные beta, gamma, moving_mean, и moving_variance имеют такой же ранг, как входной тензор, с размером измерения 1 во всех уменьшенных (не по осям) измерениях.
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 после обновления Optimizer (например, используется для реализации ограничений нормы или ограничений значений для весов слоёв). Функция должна принимать на вход непроецированную переменную и возвращать проецированную переменную (которая должна иметь ту же форму). Ограничения небезопасны при асинхронном распределённом обучении.
gamma_constraint Необязательная проекционная функция, применяемая к весу gamma после обновления Optimizer.
renorm Использовать пакетную ренормализацию (Ioffe, 2017). Это добавляет дополнительные переменные во время обучения. Вывод одинаковый для любого значения этого параметра.
renorm_clipping Словарь, который может сопоставлять ключи 'rmax', 'rmin', 'dmax' со скалярными Tensors для ограничения коррекции ренормализации. Коррекция (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 также добавлять переменные в коллекцию графов GraphKeys.TRAINABLE_VARIABLES (см. tf.Variable).
virtual_batch_size Целое число. По умолчанию virtual_batch_size — None, что означает, что пакетная нормализация выполняется по всему пакету. Когда virtual_batch_size не равно None, вместо этого выполняется "Ghost Batch Normalization", которая создаёт виртуальные подпакеты, каждый из которых нормализуется отдельно (с общими gamma, beta и скользящими статистиками). Необходимо разделить фактический размер пакета во время выполнения.
adjustment Функция, принимающая Tensor, содержащую (динамическую) форму входного тензора, и возвращающая пару (scale, bias), применяемую к нормализованным значениям (перед 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.
name Строка, имя слоя.

Ссылки:

Пакетная нормализация — ускорение обучения глубоких сетей за счёт уменьшения внутренних ковариационных сдвигов: Ioffe et al., 2015 (pdf) Пакетная ренормализация — к уменьшению зависимости от мини-пакета в моделях, нормализованных по пакету: Ioffe, 2017 (pdf)

Атрибуты
graph
scope_name

© 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/layers/BatchNormalization

Spec-Zone.ru

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