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)
|
| Исключения | |
|---|---|
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