Spec-Zone.ru › TensorFlow

tf.compat.v1.distributions.Distribution

Базовый класс для распределений вероятностей.

tf.compat.v1.distributions.Distribution(
    dtype,
    reparameterization_type,
    validate_args,
    allow_nan_stats,
    parameters=None,
    graph_parents=None,
    name=None
)

Distribution является базовым классом для построения и организации свойств (например, среднее значение, дисперсия) случайных величин (например, Бернулли, Гаусса).

Наследование

Подклассы должны реализовать функцию с ведущим подчеркиванием с тем же именем. Подпись аргументов должна быть идентичной, за исключением отсутствия name="...". Например, чтобы включить log_prob(value, name="log_prob"), подкласс должен реализовать _log_prob(value).

Подклассы могут добавлять информацию в общедоступную документацию, предоставив строки документации для своих специализаций методов. Например:

@util.AppendDocstring("Some other details.")
def _log_prob(self, value):
  ...

добавит строку «Дополнительные детали.» к строке документации функции log_prob. Это реализовано как простой декоратор, чтобы избежать жалоб линтера Python о пропущенных разделах Args/Returns/Raises в частичных строках документации.

Трансляция, пакетная обработка и формы

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

Форма аргументов для __init__, cdf, log_cdf, prob и log_prob отражает эту трансляцию, как и возвращаемое значение sample и sample_n.

sample_n_shape = [n] + batch_shape + event_shape, где sample_n_shape — форма Tensor, возвращаемая sample_n, n — количество выборок, batch_shape определяет, сколько независимых распределений, а event_shape определяет форму выборок из каждого из этих независимых распределений. Выборки независимы вдоль измерений batch_shape, но не обязательно вдоль измерений event_shape (в зависимости от особенностей базового распределения).

Используя распределение Uniform в качестве примера:

minval = 3.0
maxval = [[4.0, 6.0],
          [10.0, 12.0]]

# Broadcasting:
# This instance represents 4 Uniform distributions. Each has a lower bound at
# 3.0 as the `minval` parameter was broadcasted to match `maxval`'s shape.
u = Uniform(minval, maxval)

# `event_shape` is `TensorShape([])`.
event_shape = u.event_shape
# `event_shape_t` is a `Tensor` which will evaluate to [].
event_shape_t = u.event_shape_tensor()

# Sampling returns a sample per distribution. `samples` has shape
# [5, 2, 2], which is [n] + batch_shape + event_shape, where n=5,
# batch_shape=[2, 2], and event_shape=[].
samples = u.sample_n(5)

# The broadcasting holds across methods. Here we use `cdf` as an example. The
# same holds for `log_cdf` and the likelihood functions.

# `cum_prob` has shape [2, 2] as the `value` argument was broadcasted to the
# shape of the `Uniform` instance.
cum_prob_broadcast = u.cdf(4.0)

# `cum_prob`'s shape is [2, 2], one per distribution. No broadcasting
# occurred.
cum_prob_per_dist = u.cdf([[4.0, 5.0],
                           [6.0, 7.0]])

# INVALID as the `value` argument is not broadcastable to the distribution's
# shape.
cum_prob_invalid = u.cdf([4.0, 5.0, 6.0])

Формы

Существует три важных понятия, связанных с формами распределений TensorFlow:

  • Форма события описывает форму одного случайного отбора из распределения; она может зависеть от измерений. Для скалярных распределений форма события равна []. Для 5-мерного MultivariateNormal форма события равна [5].
  • Форма пакета описывает независимые, но не одинаково распределенные выборки, известные как «коллекция» или «группа» распределений.
  • Форма выборки описывает независимые, одинаково распределенные выборки пакетов из семейства распределений.

Форма события и форма пакета являются свойствами объекта Distribution, а форма выборки связана с конкретным вызовом sample или log_prob.

Подробные примеры использования форм распределений TensorFlow см. в этом руководстве

Значения параметров, приводящие к неопределённым статистическим данным или распределениям.

У некоторых распределений нет хорошо определённых статистических данных для всех значений параметров инициализации. Например, бета-распределение параметризуется положительными действительными числами concentration1 и concentration0, и не имеет чётко определённой моды, если concentration1 < 1 или concentration0 < 1.

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

a = tf.exp(tf.matmul(logits, weights_a))
b = tf.exp(tf.matmul(logits, weights_b))

# Will raise exception if ANY batch member has a < 1 or b < 1.
dist = distributions.beta(a, b, allow_nan_stats=False)
mode = dist.mode().eval()

# Will return NaN for batch members with either a < 1 or b < 1.
dist = distributions.beta(a, b, allow_nan_stats=True)  # Default behavior
mode = dist.mode().eval()

Во всех случаях, исключение возникает, если переданы некорректные параметры, например:

# Will raise an exception if any Op is run.
negative_a = -1.0 * a  # beta distribution by definition has a > 0.
dist = distributions.beta(negative_a, b, allow_nan_stats=True)
dist.mean().eval()
Аргументы
dtype Тип событийных выборок. None подразумевает отсутствие проверки типа.
reparameterization_type Экземпляр ReparameterizationType. Если distributions.FULLY_REPARAMETERIZED, это Distribution может быть перепараметризован в терминах некоторого стандартного распределения с функцией, чья якобиан является постоянной для области определения стандартного распределения. Если distributions.NOT_REPARAMETERIZED, то такая перепараметризация недоступна.
validate_args Python-bool, по умолчанию False. Когда True параметры распределения проверяются на корректность, несмотря на возможные ухудшение производительности во время выполнения. Когда False некорректные входные данные могут молча привести к неверным результатам.
allow_nan_stats Python-bool, по умолчанию True. Когда True, статистики (например, среднее значение, мода, дисперсия) используют значение «NaN» для указания того, что результат неопределён. Когда False, возникает исключение, если один или несколько элементов пакетных статистических данных неопределены.
parameters Python-dict параметров, используемых для создания этого Distribution.
graph_parents Python-list предварительных условий графа для этого Distribution.
name Python-str имя, добавленное в начало операций, созданных этим классом. По умолчанию: имя подкласса.
Исключения
ValueError если любой член graph_parents является None или не является Tensor.
Атрибуты
allow_nan_stats Python-bool, описывающий поведение при неопределённом статистическом показателе.

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

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

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

Размерности пакета являются индексами в независимые, но не одинаково распределённые параметризации данного распределения.

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, добавляемая к именам операций, созданных этой функцией.
Возвращаемое значение
cdf тензор формы 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' вектора.

Аргументы
name Строка Python, добавляемая к именам операций, созданных этой функцией.
Возвращаемое значение
covariance Числовой тензор с плавающей точкой, имеющий форму [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, добавляемая к именам операций, созданных этой функцией.
Возвращаемое значение
cross_entropy Числовой тензор с формой [B1, ..., Bn], представляющий собой различные вычисления (Шеннона) кросс-энтропии.

entropy

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

entropy(
    name='entropy'
)

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

event_shape_tensor

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

event_shape_tensor(
    name='event_shape_tensor'
)

Форма одного образца из одного набора в виде 1-мерного целочисленного Tensor.

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

is_scalar_batch

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

is_scalar_batch(
    name='is_scalar_batch'
)

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

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

is_scalar_event

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

is_scalar_event(
    name='is_scalar_event'
)

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

Аргументы
name Строка Python, добавляемая к именам операций, созданных этой функцией.
Возвращаемое значение
is_scalar_event Логический скаляр 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, добавляемая к именам операций, созданных этой функцией.
Возвращаемое значение
kl_divergence Числовой тензор с формой [B1, ..., Bn], представляющий собой различные вычисления расхождения Кульбака-Лейблера.

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 Имя для добавления к операциям.
Возвращаемое значение
Словарь имени параметра к формам Tensor.

param_static_shapes

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

@classmethod
param_static_shapes(
    sample_shape
)

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

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

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

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

prob

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

prob(
    value, name='prob'
)

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

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

sample

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

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

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

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

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

stddev

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

stddev(
    name='stddev'
)

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

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

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

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

Аргументы
name Python str, добавляемое в имена операций, созданных этой функцией.
Возвращаемое значение
stddev Число с плавающей запятой Tensor с формой, идентичной 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, добавляемая в префикс имен операций, созданных этой функцией.
Возвращаемое значение
Tensor с формой 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 Число с плавающей запятой Tensor с формой, идентичной batch_shape + event_shape, то есть такой же формой, как и self.mean().

© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/api_docs/python/tf/compat/v1/distributions/Distribution

Spec-Zone.ru

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