tf.compat.v1.layers.batch_normalization
Функциональный интерфейс для слоя пакетной нормализации из работы Ioffe et al., 2015.
tf.compat.v1.layers.batch_normalization(
inputs, 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,
training=False, trainable=True, name=None, reuse=None, renorm=False,
renorm_clipping=None, renorm_momentum=0.99, fused=None, virtual_batch_size=None,
adjustment=None
)
Примечание: при обучении необходимо обновлять moving_mean и moving_variance. По умолчанию операции обновления размещаются вtf.GraphKeys.UPDATE_OPS, поэтому их необходимо выполнять вместе сtrain_op. Также, убедитесь, что вы добавили все операции batch_normalization перед получением коллекции update_ops. В противном случае, update_ops будет пустой, и обучение/вывод не будут работать должным образом. Например:
x_norm = tf.compat.v1.layers.batch_normalization(x, training=training) # ... update_ops = tf.compat.v1.get_collection(tf.GraphKeys.UPDATE_OPS) train_op = optimizer.minimize(loss) train_op = tf.group([train_op, update_ops])
| Аргументы | |
|---|---|
inputs | Входной тензор. |
axis | Целое число, ось, которая должна быть нормализована (обычно ось признаков). Например, после слоя Convolution2D с параметром 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 после обновления с помощью Optimizer (например, для реализации ограничений нормы или ограничений значений для весов слоя). Функция должна принимать в качестве входных данных непроектируемую переменную и возвращать проектируемую переменную (которая должна иметь ту же форму). Ограничения небезопасны при асинхронном распределенном обучении. |
gamma_constraint | Необязательная функция проекции, применяемая к весу gamma после обновления с помощью Optimizer. |
training | Булево значение (Python или тензор TensorFlow). Определяет, возвращать ли выходной тензор в режиме обучения (нормализованный по статистике текущей выборки) или в режиме вывода (нормализованный по скользящим статистикам). ПРИМЕЧАНИЕ: убедитесь, что этот параметр задан правильно, иначе обучение/вывод не будут работать должным образом. |
trainable | Булево значение, если True также добавляет переменные в коллекцию графа GraphKeys.TRAINABLE_VARIABLES (см. tf.Variable). |
name | Строка, имя слоя. |
reuse | Булево значение, следует ли повторно использовать веса предыдущего слоя с тем же именем. |
renorm | Использовать ли Batch Renormalization (Ioffe, 2017). Это добавляет дополнительные переменные во время обучения. Вывод одинаков для обоих значений этого параметра. |
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, использовать рекомендованную системой реализацию. |
virtual_batch_size | Целое число. По умолчанию 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. |
| Возвращает | |
|---|---|
| Выходной тензор. |
| Исключения | |
|---|---|
ValueError | если включено жадное выполнение. |
Ссылки:
Batch Normalization - Ускорение обучения глубоких сетей путем уменьшения внутренней ковариационной изменчивости: Ioffe et al., 2015 (pdf) Batch Renormalization - На пути к уменьшению зависимости от мини-пакетов в моделях с пакетной нормализацией: Ioffe, 2017 (pdf)
© 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/batch_normalization