Spec-Zone.ru › TensorFlow 1.15

tf.contrib.distributions.bijectors.BatchNormalization

Вычислить `Y = g(X) s.t.

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

tf.contrib.distributions.bijectors.BatchNormalization(
    batchnorm_layer=None, training=True, validate_args=False,
    name='batch_normalization'
)

X = g^-1(Y) = (Y - mean(Y)) / std(Y)`.

Применяет пакетную нормализацию [(Ioffe и Szegedy, 2015)][1] к выборкам из распределения данных. Это можно использовать для стабилизации обучения нормализующих потоков ([Papamakarios и др., 2016][3]; [Dinh и др., 2017][2])

При обучении глубоких нейронных сетей (DNN) обычно нормализуют или осветляют функции, сдвигая их, чтобы среднее значение было равно нулю, и масштабируя их, чтобы дисперсия была равна единице.

Метод inverse() биджектора BatchNormalization, который используется в вычислении логарифмической вероятности выборок данных, реализует процедуру нормализации (сдвиг и масштабирование) с использованием среднего значения и стандартного отклонения текущей мини-патии.

И наоборот, метод forward() биджектора денормализует выборки (например, X*std(Y) + mean(Y) с использованием усреднённого среднего значения и стандартного отклонения, вычисленного во время обучения. Денермализация полезна для выборки.

dist = tfd.TransformedDistribution(
    distribution=tfd.Normal()),
    bijector=tfb.BatchNorm())

y = tfd.MultivariateNormalDiag(loc=1., scale=2.).sample(100)  # ~ N(1, 2)
x = dist.bijector.inverse(y)  # ~ N(0, 1)
y = dist.sample()  # ~ N(1, 2)

Во время обучения BatchNorm.inverse и BatchNorm.forward не гарантируется, что являются взаимно обратными, потому что inverse(y) использует статистику текущей мини-патии, в то время как forward(x) использует статистику скользящего среднего, накапливаемого во время обучения. Другими словами, BatchNorm.inverse(BatchNorm.forward(...)) и BatchNorm.forward(BatchNorm.inverse(...)) будут идентичны, когда training=False, но могут отличаться, когда training=True.

Ссылки

[1]: Сергей Иoffe и Кристиан Szegedy. Пакетная нормализация: ускорение обучения глубоких сетей за счёт сокращения внутреннего смещения ковариации. В Международной конференции по машинному обучению, 2015. https://arxiv.org/abs/1502.03167

[2]: Лоран Дин, Яша Соль-Диксин и Сами Бенжио. Оценка плотности с использованием реального NVP. В Международной конференции по представлению обучения, 2017. https://arxiv.org/abs/1605.08803

[3]: Джордж Папамакариос, Тео Павлаку и Айэн Мюррей. Маскированный авторегрессивный поток для оценки плотности. В Нейронных системах обработки информации, 2017. https://arxiv.org/abs/1705.07057

Args
batchnorm_layer tf.compat.v1.layers.BatchNormalization объект слоя. Если None, по умолчанию `tf.compat.v1.layers.BatchNormalization(gamma_constraint=nn_ops.relu(x)
  • 1e-6). This ensures positivity of the scale variable. </td> </tr><tr> <td>training</td> <td> If True, updates running-average statistics during call toinverse(). </td> </tr><tr> <td>validate_args</td> <td> Pythonboolindicating whether arguments should be checked for correctness. </td> </tr><tr> <td>name</td> <td> Pythonstr` имя, присвоенное операциям, управляемым этим объектом.
Исключения
ValueError Если bn_layer не является экземпляром tf.compat.v1.layers.BatchNormalization или если он указан с renorm=True или виртуальным размером пакета.
Атрибуты
dtype Тип данных Tensor преобразуемых данным распределением.
forward_min_event_ndims Возвращает минимальное количество измерений, на которых bijector.forward работает.
graph_parents Возвращает список граф_родителей данного Bijector.
inverse_min_event_ndims Возвращает минимальное количество измерений, на которых bijector.inverse работает.
is_constant_jacobian Возвращает true, если матрица Якоби не является функцией от x.
Примечание: Матрица Якоби либо постоянна для прямого и обратного направления, либо ни для чего.
name Возвращает строковое имя данного Bijector.
validate_args Возвращает True, если тензорные аргументы будут проверены.

Методы

forward

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

forward(
    x, name='forward'
)

Возвращает вычисление forward Bijector, т.е. X = g(Y).

Args
x Tensor. Вход для вычисления «прямого» значения.
name Имя, которое нужно присвоить этому оператору.
Возвращает
Tensor.
Исключения
TypeError если self.dtype указан и x.dtype не self.dtype.
NotImplementedError если _forward не реализовано.

forward_event_shape

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

forward_event_shape(
    input_shape
)

Форма одной выборки из одной пачки как TensorShape.

То же самое, что и forward_event_shape_tensor. Может быть частично определена.

Args
input_shape TensorShape, указывающая форму события, переданную в функцию forward .
Возвращает
forward_event_shape_tensor TensorShape, указывающая форму события после применения forward. Возможно неизвестно.

forward_event_shape_tensor

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

forward_event_shape_tensor(
    input_shape, name='forward_event_shape_tensor'
)

Форма одной выборки из одной пачки как int32 1D Tensor.

Args
input_shape Tensor, int32 вектор, указывающий форму события, переданную в функцию forward .
name имя, которое нужно дать оператору
Возвращает
forward_event_shape_tensor Tensor, int32 вектор, указывающий форму события после применения forward.

forward_log_det_jacobian

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

forward_log_det_jacobian(
    x, event_ndims, name='forward_log_det_jacobian'
)

Возвращает both the forward_log_det_jacobian.

Args
x Tensor. Вход для вычисления «прямой» матрицы Якоби.
event_ndims Количество измерений в вероятностных событиях, преобразуемых. Должно быть больше или равно self.forward_min_event_ndims. Результат суммируется по последним измерениям, чтобы получить скалярную матрицу Якоби для каждого события, т.е. он имеет форму x.shape.ndims - event_ndims измерений.
name Имя, которое нужно дать этому оператору.
Возвращает
Tensor, если этот биджектор является инъективным. Если не инъективен, это не реализовано.
Исключения
TypeError если self.dtype указан и y.dtype не self.dtype.
NotImplementedError если ни _forward_log_det_jacobian ни {_inverse, _inverse_log_det_jacobian} не реализованы, или это биджектор, который не является инъективным.

inverse

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

inverse(
    y, name='inverse'
)

Возвращает вычисление обратного Bijector, т.е. X = g^{-1}(Y).

Args
y Tensor. Вход для вычисления «обратного» значения.
name Имя, которое нужно присвоить этому оператору.
Возвращает
Tensor, если этот биджектор является инъективным. Если не инъективен, возвращает k-кортеж, содержащий уникальные k точки (x1, ..., xk) такие, что g(xi) = y.
Исключения
TypeError если self.dtype указан и y.dtype не self.dtype.
NotImplementedError если _inverse не реализовано.

inverse_event_shape

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

inverse_event_shape(
    output_shape
)

Форма одного образца из одной партии в виде TensorShape.

То же самое, что и inverse_event_shape_tensor. Может быть определена только частично.

Аргументы
output_shape TensorShape, указывающая форму части события, переданной в функцию inverse .
Возвращаемое значение
inverse_event_shape_tensor TensorShape, указывающая форму части события после применения inverse. Возможно неизвестно.

inverse_event_shape_tensor

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

inverse_event_shape_tensor(
    output_shape, name='inverse_event_shape_tensor'
)

Форма одного образца из одной партии в виде int32 1D Tensor.

Аргументы
output_shape Tensor, int32 вектор, указывающий форму части события, переданной в функцию inverse .
name имя для задания операции
Возвращаемое значение
inverse_event_shape_tensor Tensor, int32 вектор, указывающий форму части события после применения inverse .

inverse_log_det_jacobian

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

inverse_log_det_jacobian(
    y, event_ndims, name='inverse_log_det_jacobian'
)

Возвращает (логарифм определителя Якобиан o обратного)(y).

Математически, возвращает: log(det(dX/dY))(Y). (Напомним, что: X=g^{-1}(Y).)

Обратите внимание, что forward_log_det_jacobian является отрицанием этой функции, вычисленной в g^{-1}(y).

Аргументы
y Tensor. Вход для вычисления определителя обратного Якобиана.
event_ndims Количество измерений в вероятностных событиях, преобразуемых. Должно быть больше или равно self.inverse_min_event_ndims. Результат суммируется по конечным измерениям, чтобы получить скалярный определитель Якобиана для каждого события, то есть он имеет форму y.shape.ndims - event_ndims измерения.
name Имя, которое нужно дать этой операции.
Возвращаемое значение
Tensor, если этот биектор является инъективным. Если не инъективный, возвращает кортеж локальных логарифмов определителей Якобианов, log(det(Dg_i^{-1}(y))), где g_i - ограничение g на ith раздел Di.
Исключения
TypeError если self.dtype указано, и y.dtype не self.dtype .
NotImplementedError если _inverse_log_det_jacobian не реализован.

© 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/r1.15/api_docs/python/tf/contrib/distributions/bijectors/BatchNormalization

Spec-Zone.ru

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