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
)
Используется в блокнотах
| Используется в руководствах |
|---|
Нормализует активации предыдущего слоя для каждого примера в пакетe независимо, а не по всему пакету, как Batch Normalization. То есть, применяет преобразование, которое поддерживает среднее значение активации внутри каждого примера близким к 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. По умолчанию — None. |
gamma_regularizer | Необязательный регуляризатор для веса gamma. По умолчанию — None. |
beta_constraint | Необязательное ограничение для веса beta. По умолчанию — None. |
gamma_constraint | Необязательное ограничение для веса gamma. По умолчанию — None. |
**kwargs | Параметры базового слоя (например, name и dtype). |
Ссылка:
| Атрибуты | |
|---|---|
input | Получает тензор(ы) ввода символической операции. Возвращает только тензор(ы), соответствующие первому вызову операции. |
output | Получает тензор(ы) вывода слоя. Возвращает только тензор(ы), соответствующие первому вызову операции. |
Методы
from_config
@classmethod
from_config(
config
)
Создаёт слой из его конфигурации.
Этот метод — обратный к методу get_config, способный создать тот же самый слой из словаря конфигурации. Он не обрабатывает соединение слоёв (это обрабатывает сеть), а также веса (это обрабатывает 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