Spec-Zone.ru › TensorFlow 1.15

tf.contrib.layers.batch_norm

Добавляет слой пакетной нормализации из http://arxiv.org/abs/1502.03167

tf.contrib.layers.batch_norm(
    inputs, decay=0.999, center=True, scale=False, epsilon=0.001,
    activation_fn=None, param_initializers=None, param_regularizers=None,
    updates_collections=tf.GraphKeys.UPDATE_OPS, is_training=True, reuse=None,
    variables_collections=None, outputs_collections=None, trainable=True,
    batch_weights=None, fused=None, data_format=DATA_FORMAT_NHWC,
    zero_debias_moving_mean=False, scope=None, renorm=False, renorm_clipping=None,
    renorm_decay=0.99, adjustment=None
)

"Пакетная нормализация: ускорение обучения глубоких нейронных сетей за счёт уменьшения сдвига ковариации входов"

Сергей Иоффе, Кристиан Шзегеди

Может использоваться в качестве функции нормализации для conv2d и fully_connected. Нормализация выполняется по всем измерениям, кроме последнего, если data_format равно NHWC, и по всем измерениям, кроме второго, если data_format равно NCHW. В случае 2D тензора это соответствует размерности батча, а в случае 4D тензора — размерностям батча и пространственным.

Примечание: при обучении, moving_mean и moving_variance необходимо обновлять. По умолчанию операции обновления размещаются в tf.GraphKeys.UPDATE_OPS, поэтому их необходимо добавить в качестве зависимости к train_op. Например:
update_ops = tf.compat.v1.get_collection(tf.GraphKeys.UPDATE_OPS)
with tf.control_dependencies(update_ops):
  train_op = optimizer.minimize(loss)

Можно установить updates_collections=None, чтобы принудительно выполнить обновления на месте, но это может привести к снижению скорости, особенно в распределённых средах.

Аргументы
inputs Тензор с 2 или более измерениями, где первое измерение имеет batch_size. Нормализация выполняется по всем измерениям, кроме последнего, если data_format равно NHWC, и по второму измерению, если data_format равно NCHW.
decay Коэффициент затухания для скользящего среднего. Допустимые значения для decay близки к 1.0, обычно в диапазоне нескольких девяток: 0.999, 0.99, 0.9 и т.д. Более низкое значение decay (рекомендуется попробовать decay=0.9), если модель демонстрирует приемлемую производительность обучения, но низкую производительность валидации и/или тестирования. Попробуйте zero_debias_moving_mean=True для повышения стабильности.
center Если True, добавляет смещение beta к нормализованному тензору. Если False, beta игнорируется.
scale Если True, умножает на gamma. Если False, gamma не используется. Когда следующий слой линейный (например, nn.relu), это можно отключить, так как масштабирование может быть выполнено следующим слоем.
epsilon Малое значение, добавляемое к дисперсии, чтобы избежать деления на ноль.
activation_fn Функция активации, по умолчанию установлена в None, чтобы её пропустить и сохранить линейную активацию.
param_initializers Необязательные инициализаторы для beta, gamma, скользящего среднего и скользящей дисперсии.
param_regularizers Необязательный регуляризатор для beta и gamma.
updates_collections Коллекции для сбора операций обновления для вычисления. Обновления updates_ops необходимо выполнить с помощью train_op. Если None, добавляется зависимость контроля для обеспечения вычисления обновлений на месте.
is_training Флаг, указывающий, находится ли слой в режиме обучения. В режиме обучения он накапливает статистику моментов в moving_mean и moving_variance с использованием экспоненциального скользящего среднего с заданным decay. Если слой не в режиме обучения, он использует значения moving_mean и moving_variance.
reuse Флаг, указывающий, нужно ли повторно использовать слой и его переменные. Для возможности повторного использования необходимо указать область действия слоя.
variables_collections Необязательные коллекции для переменных.
outputs_collections Коллекции для добавления выходов.
trainable Если True, также добавляет переменные в коллекцию графа GraphKeys.TRAINABLE_VARIABLES (см. tf.Variable).
batch_weights Необязательный тензор формы [batch_size], содержащий весовой коэффициент частоты для каждого элемента батча. Если присутствует, пакетная нормализация использует взвешенное среднее и дисперсию. (Это может использоваться для исправления смещения в выборке обучающих примеров.)
fused если None или True, использует более быструю, объединённую реализацию, если это возможно. Если False, использует рекомендуемую системой реализацию.
data_format Строка. Поддерживаются NHWC (по умолчанию) и NCHW.
zero_debias_moving_mean Использовать zero_debias для moving_mean. Создаёт новую пару переменных 'moving_mean/biased' и 'moving_mean/local_step'.
scope Необязательная область действия для variable_scope.
renorm Используйте ли пакетную перенормировку (https://arxiv.org/abs/1702.03275). Это добавляет дополнительные переменные во время обучения. Вывод одинаков для любого значения этого параметра.
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_decay Импульс, используемый для обновления скользящих средних и стандартных отклонений с renorm. В отличие от momentum, это влияет на обучение и не должно быть слишком маленьким (что добавит шума) или слишком большим (что даст устаревшие оценки). Обратите внимание, что decay всё ещё применяется для получения средних и дисперсий для вывода.
adjustment Функция, принимающая Tensor, содержащую (динамическую) форму тензора ввода, и возвращающая пару (масштаб, смещение) для применения к нормализованным значениям (перед gamma и beta), только во время обучения. Например, 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, корректировка не применяется.
Возвращаемое значение
Tensor представляющее результат операции.
Исключения
ValueError Если data_format не равно ни NHWC, ни NCHW.
ValueError Если ранг inputs не определён.
ValueError Если ранг или размерность канала inputs не определены.

© 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/r1.15/api_docs/python/tf/contrib/layers/batch_norm

Spec-Zone.ru

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