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