Spec-Zone.ru › TensorFlow 1.15

tf.contrib.distributions.TransformedDistribution

Преобразованное распределение.

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

tf.contrib.distributions.TransformedDistribution(
    distribution, bijector=None, batch_shape=None, event_shape=None,
    validate_args=False, name=None
)

Объект TransformedDistribution моделирует p(y) на основе базового распределения p(x), и детерминированного, обратимого, дифференцируемого преобразования Y = g(X). Преобразование, как правило, является экземпляром класса Bijector, а базовое распределение — экземпляром класса Distribution.

Ожидается, что Bijector будет реализовывать следующие функции:

  • forward,
  • inverse,
  • inverse_log_det_jacobian. Семантика этих функций описана в документации по Bijector.

Теперь опишем, как TransformedDistribution изменяет входные/выходные данные Distribution, связанного с случайной величиной (rv) X.

Запишите cdf(Y=y) для абсолютно непрерывной функции кумулятивного распределения случайной величины Y; запишите функцию плотности вероятности pdf(Y=y) := d^k / (dy_1,...,dy_k) cdf(Y=y) для её производной по Y в точке y. Предполагается, что Y = g(X), где g является детерминированной диффеоморфией, т.е. неслучайной, непрерывной, дифференцируемой и обратимой функцией. Запишите обратную функцию g как X = g^{-1}(Y) и (J o g)(x) для якобиана g в точке x.

Объект TransformedDistribution реализует следующие операции:

  • sample Математически: Y = g(X) Программное обеспечение: bijector.forward(distribution.sample(...))

  • log_prob Математически: `(log o pdf)(Y=y) = (log o pdf o g^{-1})(y)`

    + (log o abs o det o J o g^{-1})(y)`
    

    Программное обеспечение: (distribution.log_prob(bijector.inverse(y)) + bijector.inverse_log_det_jacobian(y))

  • log_cdf Математически: (log o cdf)(Y=y) = (log o cdf o g^{-1})(y) Программное обеспечение: distribution.log_cdf(bijector.inverse(x))

  • и аналогично для: cdf, prob, log_survival_function, survival_function.

Простой пример создания распределения Лог-Нормального из нормального распределения:

ds = tfp.distributions
log_normal = ds.TransformedDistribution(
  distribution=ds.Normal(loc=0., scale=1.),
  bijector=ds.bijectors.Exp(),
  name="LogNormalTransformedDistribution")

Объект LogNormal, созданный из вызываемых функций:

ds = tfp.distributions
log_normal = ds.TransformedDistribution(
  distribution=ds.Normal(loc=0., scale=1.),
  bijector=ds.bijectors.Inline(
    forward_fn=tf.exp,
    inverse_fn=tf.math.log,
    inverse_log_det_jacobian_fn=(
      lambda y: -tf.reduce_sum(tf.math.log(y), axis=-1)),
  name="LogNormalTransformedDistribution")

Ещё один пример создания нормального распределения из стандартного нормального:

ds = tfp.distributions
normal = ds.TransformedDistribution(
  distribution=ds.Normal(loc=0., scale=1.),
  bijector=ds.bijectors.Affine(
    shift=-1.,
    scale_identity_multiplier=2.)
  name="NormalTransformedDistribution")

Форма пакетной и событийной структуры TransformedDistribution определяется базовым распределением, если явно не переопределены параметры batch_shape или event_shape. Указание переопределённой формы batch_shape (event_shape разрешено только в том случае, если форма пакетной структуры (форма события) базового распределения является скалярной. Биджектор применяется к распределению так, как если бы распределение имело переопределённую форму. Следующий пример демонстрирует, как создать многомерное нормальное распределение как TransformedDistribution.

ds = tfp.distributions
# We will create two MVNs with batch_shape = event_shape = 2.
mean = [[-1., 0],      # batch:0
        [0., 1]]       # batch:1
chol_cov = [[[1., 0],
             [0, 1]],  # batch:0
            [[1, 0],
             [2, 2]]]  # batch:1
mvn1 = ds.TransformedDistribution(
    distribution=ds.Normal(loc=0., scale=1.),
    bijector=ds.bijectors.Affine(shift=mean, scale_tril=chol_cov),
    batch_shape=[2],  # Valid because base_distribution.batch_shape == [].
    event_shape=[2])  # Valid because base_distribution.event_shape == [].
mvn2 = ds.MultivariateNormalTriL(loc=mean, scale_tril=chol_cov)
# mvn1.log_prob(x) == mvn2.log_prob(x)
Аргументы
distribution Экземпляр базового распределения для преобразования. Обычно экземпляр Distribution.
bijector Объект, отвечающий за вычисление преобразования. Обычно экземпляр Bijector. None означает Identity().
batch_shape integer вектор Tensor, который переопределяет distribution batch_shape; допустимо только, если distribution.is_scalar_batch().
event_shape integer вектор Tensor, который переопределяет distribution event_shape; допустимо только, если distribution.is_scalar_event().
validate_args Python bool, по умолчанию False. Когда True параметры распределения проверяются на корректность, несмотря на возможное ухудшение производительности выполнения. Когда False недопустимые входные данные могут молча привести к неверным результатам.
name Python str имя, добавляемое в качестве префикса к операциям, созданным этим классом. По умолчанию: bijector.name + distribution.name.
Атрибуты
allow_nan_stats Python bool описывает поведение, когда статистическая характеристика не определена.

Статистические характеристики возвращают +/- бесконечность, когда это имеет смысл. Например, дисперсия распределения Коши равна бесконечности. Однако иногда статистическая характеристика не определена, например, если функция плотности вероятности распределения не достигает максимума в пределах области определения распределения, мода не определена. Если среднее значение не определено, то по определению дисперсия также не определена. Например, среднее значение для распределения Стьюдента при df = 1 не определено (нет чёткого способа сказать, что это либо + или - бесконечность), поэтому дисперсия = E[(X - среднее значение)**2] также не определена.

batch_shape Форма одного образца из одного индекса события в виде TensorShape.

Может быть частично определена или неизвестна.

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

bijector Функция, преобразующая x в y.
distribution Базовое распределение, p(x).
dtype DType Tensor обрабатываются этим Distribution.
event_shape Форма одного образца из одной пакетной обработки в виде TensorShape.

Может быть частично определена или неизвестна.

name Имя, добавляемое в качестве префикса ко всем операциям, созданным этим Distribution.
parameters Словарь параметров, используемых для создания этого Distribution.
reparameterization_type Описывает, как образцы из распределения повторно параметризуются.

В настоящее время это один из статических экземпляров distributions.FULLY_REPARAMETERIZED или distributions.NOT_REPARAMETERIZED.

validate_args Python bool указывающий, возможно, включены дорогостоящие проверки.

Методы

batch_shape_tensor

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

batch_shape_tensor(
    name='batch_shape_tensor'
)

Форма одного образца из одного индекса события в виде одномерного Tensor.

Размеры пакета используются для индексов независимых, нетождественных параметризаций этого распределения.

Аргументы
name имя для операции
Возвращает
batch_shape Tensor.

cdf

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

cdf(
    value, name='cdf'
)

Функция кумулятивного распределения.

Для случайной величины X, функция кумулятивного распределения cdf имеет вид:

cdf(x) := P[X <= x]
Аргументы
value float или double Tensor.
name Python str добавляется в качестве префикса к именам операций, созданных этой функцией.
Возвращает
cdf Tensor формы sample_shape(x) + self.batch_shape со значениями типа self.dtype.

copy

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

copy(
    **override_parameters_kwargs
)

Создаёт глубокую копию распределения.

Примечание: копия распределения может по-прежнему зависеть от исходных аргументов инициализации.
Аргументы
**override_parameters_kwargs Строковый/словарный словарь аргументов инициализации для переопределения новыми значениями.
Возвращает
distribution Новый экземпляр type(self), инициализированный объединением self.parameters и override_parameters_kwargs, т.е., dict(self.parameters, **override_parameters_kwargs).

covariance

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

covariance(
    name='covariance'
)

Ковариация.

Ковариация (возможно) определяется только для распределений со значениями не по одному событию.

Например, для распределения со значениями длиной k, векторизованного распределения, она рассчитывается как,

Cov[i, j] = Covariance(X_i, X_j) = E[(X_i - E[X_i]) (X_j - E[X_j])]

где Cov является (пакетом) k x k матрицей, 0 <= (i, j) < k, и E обозначает математическое ожидание.

В альтернативе, для невекторных, многомерных распределений (например, матричнозначных, Вишарта), Covariance должна возвращать (пакет) матриц при некотором векторировании событий, т.е.,

Cov[i, j] = Covariance(Vec(X)_i, Vec(X)_j) = [as above]

где Cov является (пакетом) k' x k' матриц, 0 <= (i, j) < k' = reduce_prod(event_shape), и Vec является некоторой функцией, отображающей индексы размерностей событий этого распределения в индексы вектора длиной k'.

END_OF_DOCUMENT_MARKER
Аргументы
name Python str добавляемый к именам операций, созданных этой функцией.
Возвращаемое значение
covariance Вещественное число с плавающей точкой Tensor формы [B1, ..., Bn, k', k'], где первые n измерения — координаты пакетной обработки, а k' = reduce_prod(self.event_shape).

cross_entropy

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

cross_entropy(
    other, name='cross_entropy'
)

Вычисляет перекрёстную энтропию (по Шеннону).

Обозначим данное распределение (self) как P, а распределение other — как Q. Предполагая, что P, Q абсолютно непрерывны относительно друг друга и допускают плотности p(x) dr(x) и q(x) dr(x), перекрёстная энтропия (по Шеннону) определяется как:

H[P, Q] = E_p[-log q(X)] = -int_F p(x) log q(x) dr(x)

где F обозначает область значений случайной величины X ~ P.

Аргументы
other Экземпляр tfp.distributions.Distribution.
name Python str добавляемый к именам операций, созданных этой функцией.
Возвращаемое значение
cross_entropy Вещественное число с плавающей точкой self.dtype Tensor формы [B1, ..., Bn], представляющее n различные вычисления перекрёстной энтропии (по Шеннону).

entropy

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

entropy(
    name='entropy'
)

Энтропия Шеннона в натах.

event_shape_tensor

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

event_shape_tensor(
    name='event_shape_tensor'
)

Форма одного образца из одного пакета в виде одномерного целочисленного массива int32 Tensor.

Аргументы
name имя операции
Возвращаемое значение
event_shape Tensor.

is_scalar_batch

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

is_scalar_batch(
    name='is_scalar_batch'
)

Указывает, что batch_shape == [].

Аргументы
name Python str добавляемый к именам операций, созданных этой функцией.
Возвращаемое значение
is_scalar_batch bool скаляр Tensor.

is_scalar_event

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

is_scalar_event(
    name='is_scalar_event'
)

Указывает, что event_shape == [].

Аргументы
name Python str добавляемый к именам операций, созданных этой функцией.
Возвращаемое значение
is_scalar_event bool скаляр Tensor.

kl_divergence

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

kl_divergence(
    other, name='kl_divergence'
)

Вычисляет расстояние Кульбака — Лейблера.

Обозначим данное распределение (self) как p, а распределение other — как q. Предполагая, что p, q абсолютно непрерывны относительно эталонной меры r, расстояние Кульбака — Лейблера определяется как:

KL[p, q] = E_p[log(p(X)/q(X))]
         = -int_F p(x) log q(x) dr(x) + int_F p(x) log p(x) dr(x)
         = H[p, q] - H[p]

где F обозначает область значений случайной величины X ~ p, H[., .] обозначает перекрёстную энтропию (по Шеннону), а H[.] обозначает энтропию (по Шеннону).

Аргументы
other Экземпляр tfp.distributions.Distribution.
name Python str добавляемый к именам операций, созданных этой функцией.
Возвращаемое значение
kl_divergence Вещественное число с плавающей точкой self.dtype Tensor формы [B1, ..., Bn], представляющее n различные вычисления расстояния Кульбака — Лейблера.

log_cdf

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

log_cdf(
    value, name='log_cdf'
)

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

Для случайной величины X, функция кумулятивного распределения cdf имеет вид:

log_cdf(x) := Log[ P[X <= x] ]

Часто для log_cdf(x) используется численное приближение, которое даёт более точный результат, чем просто взятие логарифма cdf при x << -1.

Аргументы
value float или double Tensor.
name Python str добавляемый к именам операций, созданных этой функцией.
Возвращаемое значение
logcdf тензор Tensor формы sample_shape(x) + self.batch_shape со значениями типа self.dtype.

log_prob

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

log_prob(
    value, name='log_prob'
)

Логарифмическая функция плотности/массы вероятности.

Аргументы
value float или double Tensor.
name Python str добавляемый к именам операций, созданных этой функцией.
Возвращаемое значение
log_prob тензор Tensor формы sample_shape(x) + self.batch_shape со значениями типа self.dtype.

log_survival_function

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

log_survival_function(
    value, name='log_survival_function'
)

Логарифмическая функция выживания.

Для случайной величины X, функция выживания определяется как:

log_survival_function(x) = Log[ P[X > x] ]
                         = Log[ 1 - P[X <= x] ]
                         = Log[ 1 - cdf(x) ]

Обычно для логарифмической функции выживания используются различные численные приближения, которые более точные, чем 1 - cdf(x) при x >> 1.

Аргументы
value float или double Tensor.
name Python str добавляемый к именам операций, созданных этой функцией.
Tensor формы sample_shape(x) + self.batch_shape со значениями типа self.dtype.

mean

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

mean(
    name='mean'
)

Среднее значение.

mode

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

mode(
    name='mode'
)

Мода.

param_shapes

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

@classmethod
param_shapes(
    sample_shape, name='DistributionParamShapes'
)

Формы параметров, учитывая желаемую форму вызова sample().

Это метод класса, который описывает, какие аргументы ключ/значение требуются для создания экземпляра данного Distribution, чтобы получить определённую форму для вызова sample() этим экземпляром.

Подклассы должны переопределять метод класса _param_shapes.

Аргументы
sample_shape Tensor или список/кортеж Python. Желаемая форма вызова sample().
name Имя для добавления к операциям.
Возвращает
dict имени параметра к формам Tensor.

param_static_shapes

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

@classmethod
param_static_shapes(
    sample_shape
)

param_shapes со статическими (т.е. TensorShape) формами.

Это метод класса, который описывает, какие аргументы ключ/значение требуются для создания экземпляра данного Distribution, чтобы получить определённую форму для вызова sample() этим экземпляром. Предполагается, что форма выборки статически известна.

Подклассы должны переопределять метод класса _param_shapes, чтобы возвращать тензоры с постоянными значениями при подаче постоянных значений.

Аргументы
sample_shape TensorShape или список/кортеж Python. Желаемая форма вызова sample().
Возвращает
dict имени параметра к TensorShape.
Исключения
ValueError если sample_shape является TensorShape, и не определён полностью.

prob

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

prob(
    value, name='prob'
)

Функция плотности/массы вероятности.

Аргументы
value float или double Tensor.
name Строка Python, добавляемая к именам операций, созданных этой функцией.
Возвращает
prob тензор формы sample_shape(x) + self.batch_shape со значениями типа self.dtype.

quantile

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

quantile(
    value, name='quantile'
)

Функция квантиля. Также известна как "обратная функция распределения" или "функция процентиля".

Для случайной переменной X и p in [0, 1], quantile:

quantile(p) := x such that P[X <= x] == p
Аргументы
value float или double Tensor.
name Строка Python, добавляемая к именам операций, созданных этой функцией.
Возвращает
quantile тензор формы sample_shape(x) + self.batch_shape со значениями типа self.dtype.

sample

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

sample(
    sample_shape=(), seed=None, name='sample'
)

Генерирует выборки заданной формы.

Обратите внимание, что вызов sample() без аргументов сгенерирует одну выборку.

Аргументы
sample_shape 0D или 1D целочисленное значение. Форма генерируемых выборок.
seed Целочисленное семя для генератора псевдослучайных чисел.
name Имя для операции.
Возвращает
samples тензор с добавленными измерениями sample_shape.

stddev

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

stddev(
    name='stddev'
)

Среднеквадратическое отклонение.

Среднеквадратическое отклонение определяется как,

stddev = E[(X - E[X])**2]**0.5

где X — случайная переменная, связанная с этим распределением, E обозначает математическое ожидание, и stddev.shape = batch_shape + event_shape.

Аргументы
name Строка Python, добавляемая к именам операций, созданных этой функцией.
Возвращает
stddev Число с плавающей запятой с формой, идентичной batch_shape + event_shape, т.е. той же формой, что и self.mean().

survival_function

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

survival_function(
    value, name='survival_function'
)

Функция выживания.

Для случайной переменной X, функция выживания определяется как:

survival_function(x) = P[X > x]
                     = 1 - P[X <= x]
                     = 1 - cdf(x).
Аргументы
value float или double Tensor.
name Строка Python, добавляемая к именам операций, созданных этой функцией.
Возвращает
тензор с формой sample_shape(x) + self.batch_shape и значениями типа self.dtype.

variance

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

variance(
    name='variance'
)

Дисперсия.

Дисперсия определяется как,

Var = E[(X - E[X])**2]

где X — случайная переменная, связанная с этим распределением, E обозначает математическое ожидание, и Var.shape = batch_shape + event_shape.

Аргументы
name Строка Python, добавляемая к именам операций, созданных этой функцией.
Возвращает
variance Число с плавающей запятой с формой, идентичной batch_shape + event_shape, т.е. той же формой, что и self.mean().

© 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/TransformedDistribution

Spec-Zone.ru

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