Spec-Zone.ru › TensorFlow 2.3

tf.keras.layers.LayerNormalization

Просмотреть исходный код на GitHub

Слой нормализации по слоям (Ba et al., 2016).

Наследуется от: Layer

Просмотр псевдонимов

Псевдонимы для миграции

См. Руководство по миграции для получения более подробной информации.

tf.compat.v1.keras.layers.LayerNormalization

tf.keras.layers.LayerNormalization(
    axis=-1, epsilon=0.001, center=True, scale=True, beta_initializer='zeros',
    gamma_initializer='ones', beta_regularizer=None, gamma_regularizer=None,
    beta_constraint=None, gamma_constraint=None, trainable=True, name=None, **kwargs
)

Нормализует активации предыдущего слоя для каждого примера в пакете независимо, а не по всему пакету, как Batch Normalization. То есть, применяется преобразование, которое поддерживает средние активации внутри каждого примера близко к 0, а стандартное отклонение активаций близко к 1.

Для тензора inputs, вычисляются моменты и нормализация выполняется по осям, указанным в axis.

Пример:

data = tf.constant(np.arange(10).reshape(5, 2) * 10, dtype=tf.float32)
print(data)
tf.Tensor(
[[ 0. 10.]
 [20. 30.]
 [40. 50.]
 [60. 70.]
 [80. 90.]], shape=(5, 2), dtype=float32)
layer = tf.keras.layers.LayerNormalization(axis=1)
output = layer(data)
print(output)
tf.Tensor(
[[-1. 1.]
 [-1. 1.]
 [-1. 1.]
 [-1. 1.]
 [-1. 1.]], shape=(5, 2), dtype=float32)

Обратите внимание, что с Layer Normalization нормализация происходит по осям внутри каждого примера, а не по разным примерам в пакете.

Если 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 = tf.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, последней размерности на входе.
epsilon Маленькое число с плавающей точкой, добавляемое к дисперсии, чтобы избежать деления на ноль. По умолчанию 1e-3
center Если True, добавить смещение beta к нормализованному тензору. Если False, beta игнорируется. По умолчанию True.
scale Если True, умножить на gamma. Если False, gamma не используется. По умолчанию True. Когда следующий слой является линейным (например, nn.relu), это можно отключить, поскольку масштабирование будет выполняться следующим слоем.
beta_initializer Инициализатор для веса beta. По умолчанию ноль.
gamma_initializer Инициализатор для веса gamma. По умолчанию единица.
beta_regularizer Необязательный регуляризатор для веса beta. По умолчанию None.
gamma_regularizer Необязательный регуляризатор для веса gamma. По умолчанию None.
beta_constraint Необязательное ограничение для веса beta. По умолчанию None.
gamma_constraint Необязательное ограничение для веса gamma. По умолчанию None.
trainable Булево значение, если True переменные будут помечены как обучаемые. По умолчанию True.

Форма входных данных: произвольная. Используйте ключевой аргумент input_shape (кортеж целых чисел, не включающий ось образцов), когда этот слой используется как первый слой в модели. Форма выходных данных: такая же, как форма входных данных. Ссылка:

  • Lei Ba et al., 2016.

© 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.3/api_docs/python/tf/keras/layers/LayerNormalization

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API