tf.keras.layers.LayerNormalization
Слой нормализации по слоям (Ba et al., 2016).
Наследует от: Layer, Operation
tf.keras.layers.LayerNormalization(
axis=-1,
epsilon=0.001,
center=True,
scale=True,
rms_scaling=False,
beta_initializer='zeros',
gamma_initializer='ones',
beta_regularizer=None,
gamma_regularizer=None,
beta_constraint=None,
gamma_constraint=None,
**kwargs
)
Используется в блокнотах
| Используется в учебных пособиях |
|---|
Нормализует активации предыдущего слоя независимо для каждого заданного примера в пакете, а не для всего пакета, как при пакетной нормализации. То есть применяет преобразование, которое поддерживает среднее значение активации каждого примера близким к 0, а стандартное отклонение активации — близким к 1.
Если включены scale или center, слой масштабирует нормализованные выходные данные, распространяя по ним обучаемую переменную gamma, и центрирует выходные данные, распространяя по ним обучаемую переменную beta. По умолчанию gamma будет тензором единиц, а beta — тензором нулей, поэтому до начала обучения центрирование и масштабирование не будут оказывать эффекта.
Таким образом, при включенных масштабировании и центрировании уравнения нормализации выглядят следующим образом:
Пусть промежуточные активации мини-пакета задаются как inputs.
Для каждого примера x_i в inputs с k признаками вычислим среднее и дисперсию примера:
mean_i = sum(x_i[j] for j in range(k)) / k var_i = sum((x_i[j] - mean_i) ** 2 for j in range(k)) / k
а затем вычислим нормализованное значение x_i_normalized, добавив небольшую величину epsilon для обеспечения численной устойчивости.
x_i_normalized = (x_i - mean_i) / sqrt(var_i + epsilon)
И наконец, x_i_normalized линейно преобразуется с помощью gamma и beta — обучаемых параметров:
output_i = x_i_normalized * gamma + beta
gamma и beta охватывают оси inputs, заданные в axis; эта часть формы входных данных должна быть полностью определена.
Например:
layer = keras.layers.LayerNormalization(axis=[1, 2, 3]) layer.build([5, 20, 30, 40]) print(layer.beta.shape) (20, 30, 40) print(layer.gamma.shape) (20, 30, 40)
Обратите внимание, что в других реализациях нормализации по слоям параметры gamma и beta могут определяться по отдельному набору осей, отличному от осей, по которым выполняется нормализация. Например, групповая нормализация (Wu et al., 2018) с размером группы 1 соответствует нормализации по слоям, выполняемой по высоте, ширине и каналам, при этом gamma и beta охватывают только измерение каналов. Поэтому эта реализация нормализации по слоям не будет соответствовать слою групповой нормализации с размером группы 1.
| Аргументы | |
|---|---|
axis | Целое число или список/кортеж. Ось или оси, по которым выполняется нормализация. Обычно это ось или оси признаков. Оси, которые не учитываются, обычно являются осями пакета. -1 — последнее измерение входных данных. Значение по умолчанию — -1. |
epsilon | Небольшое число с плавающей запятой, добавляемое к дисперсии, чтобы избежать деления на ноль. Значение по умолчанию — 1e-3. |
center | Если значение равно True, к нормализованному тензору добавляется смещение beta. Если значение равно False, beta игнорируется. Значение по умолчанию — True. |
scale | Если значение равно True, выполняется умножение на gamma. Если значение равно False, gamma не используется. Если следующий слой является линейным (например, nn.relu), этот параметр можно отключить, поскольку масштабирование будет выполнено следующим слоем. Значение по умолчанию — True. |
rms_scaling | Если значение равно True, center и scale игнорируются, а входные данные масштабируются на gamma и обратный квадратный корень из суммы квадратов всех входных данных. Это приближенный и более быстрый подход, позволяющий не вычислять среднее значение входных данных. |
beta_initializer | Инициализатор веса beta. По умолчанию — нули. |
gamma_initializer | Инициализатор веса gamma. По умолчанию — единицы. |
beta_regularizer | Необязательный регуляризатор веса beta. По умолчанию отсутствует. |
gamma_regularizer | Необязательный регуляризатор веса gamma. По умолчанию отсутствует. |
beta_constraint | Необязательное ограничение для веса beta. По умолчанию отсутствует. |
gamma_constraint | Необязательное ограничение для веса gamma. По умолчанию отсутствует. |
**kwargs | Именованные аргументы базового слоя (например, name и dtype). |
Литература:
| Атрибуты | |
|---|---|
input | Возвращает входные тензоры символьной операции. Возвращает только тензоры, соответствующие первому вызову операции. |
output | Возвращает выходные тензоры слоя. Возвращает только тензоры, соответствующие первому вызову операции. |
Методы
from_config
@classmethod
from_config(
config
)
Создает слой на основе его конфигурации.
Этот метод является обратным по отношению к get_config и позволяет создать экземпляр того же слоя на основе словаря конфигурации. Он не обрабатывает связи между слоями (этим занимается Network) и веса (этим занимается set_weights).
| Аргументы | |
|---|---|
config | Словарь Python, обычно являющийся результатом вызова get_config. |
| Возвращает | |
|---|---|
| Экземпляр слоя. |
symbolic_call
symbolic_call(
*args, **kwargs
)
© 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/api_docs/python/tf/keras/layers/LayerNormalization