Spec-Zone.ru › TensorFlow 2.4

tf.keras.layers.LayerNormalization

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

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

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

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

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

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

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
)

Нормализует активации предыдущего слоя для каждого примера в пакет независимо, а не по всему пакету, как Батч Нормализация. То есть применяет преобразование, которое поддерживает среднюю активацию каждого примера близкой к 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)

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

Если 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 и др., 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 и др., 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.4/api_docs/python/tf/keras/layers/LayerNormalization

Spec-Zone.ru

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