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-мерного многомерного нормального распределения форма события — [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, добавляемое перед именами Ops, созданных этим классом. По умолчанию используется имя подкласса.
Вызывает исключения
ValueError если какой-либо элемент graph_parents равен None или не является Tensor.
Атрибуты
allow_nan_stats Объект Python bool, описывающий поведение при неопределённом значении статистики.

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

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

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

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

dtype DType обработанных этим Distribution Tensor.
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'.

Аргументы
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 определяется следующим образом:

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 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 int32 Tensor размерности 0 или 1. Форма сгенерированных выборок.
seed Целочисленное начальное значение Python для генератора случайных чисел
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 str, добавляемый к именам операций, создаваемых этой функцией.
Возвращает
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 str, добавляемый к именам операций, создаваемых этой функцией.
Возвращает
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