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.compat.v1.zeros_initializer(),
gamma_initializer=tf.compat.v1.ones_initializer(),
moving_mean_initializer=tf.compat.v1.zeros_initializer(),
moving_variance_initializer=tf.compat.v1.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
)
Переход на TF2
Этот API является устаревшим API, совместимым только с режимом eager execution и tf.function, если его использовать совместно с tf.compat.v1.keras.utils.track_tf1_style_variables
Обратитесь к разделу сопоставления моделей tf.layers в руководстве по миграции, чтобы узнать, как использовать вашу модель TensorFlow v1 в TF2 с Keras.
Соответствующий слой TensorFlow v2 — это tf.keras.layers.BatchNormalization.
Шаблон обновления пакетных данных с использованием tf.control_dependencies(tf.GraphKeys.UPDATE_OPS) не следует использовать в чистом TF2. Обратитесь к документации tf.keras.layers.BatchNormalization для получения дополнительной информации.
Структурное соответствие с родным TF2
Ни одно из поддерживаемых аргументов не изменило своё имя.
До:
x_norm = tf.compat.v1.layers.batch_normalization(x)
После:
Для миграции кода, использующего функциональные слои TF1, используйте Функциональный API Keras:
x = tf.keras.Input(shape=(28, 28, 1),) y = tf.keras.layers.BatchNormalization()(x) model = tf.keras.Model(x, y)
Как сопоставить аргументы
| Имя аргумента TF1 | Имя аргумента TF2 | Примечание |
|---|---|---|
name | name | Базовый класс слоя |
trainable | trainable | Базовый класс слоя |
axis | axis | - |
momentum | momentum | - |
epsilon | epsilon | - |
center | center | - |
scale | scale | - |
beta_initializer | beta_initializer | - |
gamma_initializer | gamma_initializer | - |
moving_mean_initializer | moving_mean_initializer | - |
beta_regularizer | `beta_regularizer' | - |
gamma_regularizer | `gamma_regularizer' | - |
beta_constraint | `beta_constraint' | - |
gamma_constraint | `gamma_constraint' | - |
renorm | Не поддерживается | - |
renorm_clipping | Не поддерживается | - |
renorm_momentum | Не поддерживается | - |
fused | Не поддерживается | - |
virtual_batch_size | Не поддерживается | - |
adjustment | Не поддерживается | - |
Описание
Примечание: при обучении необходимо обновлять 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 | Использовать ли пакетную перенормировку (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 | Функция, принимающая int, содержащую (динамическую) форму входного тензора и возвращающую пару (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. |
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. |
| Возвращает | |
|---|---|
| Результирующий тензор. |
| Исключения | |
|---|---|
ValueError | если режим eager execution включен. |
Ссылки:
Нормализация по батчам — Ускорение обучения глубоких нейронных сетей путем уменьшения смещения ковариации внутри: Ioffe и др., 2015 (pdf) Батч-нормализация — На пути к уменьшению зависимости от мини-батчей в батч-нормализованных моделях: Ioffe, 2017 (pdf)
© 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/layers/batch_normalization