Spec-Zone.ru › TensorFlow

tf.compat.v1.distributions.Dirichlet

Распределение Дирихле.

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

tf.compat.v1.distributions.Dirichlet(
    concentration,
    validate_args=False,
    allow_nan_stats=True,
    name='Dirichlet'
)

Распределение Дирихле определено над (k-1)-симплексом с использованием положительного вектора длины k concentration (k > 1). Распределение Дирихле идентично распределению Бета, когда k = 2.

Математические детали

Распределение Дирихле — это распределение над открытым (k-1)-симплексом, т. е.

S^{k-1} = { (x_0, ..., x_{k-1}) in R^k : sum_j x_j = 1 and all_j x_j > 0 }.

Функция плотности вероятности (pdf) равна,

pdf(x; alpha) = prod_j x_j**(alpha_j - 1) / Z
Z = prod_j Gamma(alpha_j) / Gamma(sum_j alpha_j)

где:

  • x in S^{k-1}, т. е., (k-1)-симплекс,
  • concentration = alpha = [alpha_0, ..., alpha_{k-1}], alpha_j > 0,
  • Z — это нормализационная постоянная, также известная как многомерная бета-функция, и,
  • Gamma — это гамма-функция.

concentration представляет собой среднее общее число появлений класса, т. е.

concentration = alpha = mean * total_concentration

где mean в S^{k-1}, а total_concentration — это положительное действительное число, представляющее среднее общее число появлений.

Параметры распределения автоматически транслируются во всех функциях; см. примеры для получения подробной информации.

Предупреждение: Некоторые компоненты выборок могут быть равны нулю из-за конечной точности. Это происходит чаще, когда некоторые концентрации очень малы. Убедитесь, что вы округлили выборки до np.finfo(dtype).tiny перед вычислением плотности.

Выборки из этого распределения перепараметризованы (путь дифференцируемы). Производные вычисляются с использованием подхода, описанного в (Figurnov et al., 2018).

Примеры

import tensorflow_probability as tfp
tfd = tfp.distributions

# Create a single trivariate Dirichlet, with the 3rd class being three times
# more frequent than the first. I.e., batch_shape=[], event_shape=[3].
alpha = [1., 2, 3]
dist = tfd.Dirichlet(alpha)

dist.sample([4, 5])  # shape: [4, 5, 3]

# x has one sample, one batch, three classes:
x = [.2, .3, .5]   # shape: [3]
dist.prob(x)       # shape: []

# x has two samples from one batch:
x = [[.1, .4, .5],
     [.2, .3, .5]]
dist.prob(x)         # shape: [2]

# alpha will be broadcast to shape [5, 7, 3] to match x.
x = [[...]]   # shape: [5, 7, 3]
dist.prob(x)  # shape: [5, 7]
# Create batch_shape=[2], event_shape=[3]:
alpha = [[1., 2, 3],
         [4, 5, 6]]   # shape: [2, 3]
dist = tfd.Dirichlet(alpha)

dist.sample([4, 5])  # shape: [4, 5, 2, 3]

x = [.2, .3, .5]
# x will be broadcast as [[.2, .3, .5],
#                         [.2, .3, .5]],
# thus matching batch_shape [2, 3].
dist.prob(x)         # shape: [2]

Вычислите градиенты выборок по отношению к параметрам:

alpha = tf.constant([1.0, 2.0, 3.0])
dist = tfd.Dirichlet(alpha)
samples = dist.sample(5)  # Shape [5, 3]
loss = tf.reduce_mean(tf.square(samples))  # Arbitrary loss function
# Unbiased stochastic gradients of the loss function
grads = tf.gradients(loss, alpha)
Ссылки
Неявные градиенты перепараметризации: Figurnov et al., 2018 (pdf)
Аргументы
concentration Положительное число с плавающей точкой Tensor, указывающее среднее число появлений класса; также «альфа». Подразумевает self.dtype, а также self.batch_shape, self.event_shape, т. е., если concentration.shape = [N1, N2, ..., Nm, k], то batch_shape = [N1, N2, ..., Nm] и event_shape = [k].
validate_args Python bool, по умолчанию False. Когда True проверяются параметры распределения на соответствие требованиям, несмотря на возможные снижение производительности во время выполнения. При False недопустимые входные данные могут молча привести к неправильным результатам.
allow_nan_stats Python bool, по умолчанию True. При True статистика (например, среднее значение, мода, дисперсия) использует значение «NaN», чтобы указать, что результат не определен. При False, если один или несколько элементов партии статистики не определены, возникает исключение.
name Python str имя, добавляемое в префикс к операциям, созданным этим классом.
Атрибуты
allow_nan_stats Python bool, описывающий поведение при неопределённости статистического показателя.

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

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

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

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

concentration Параметр концентрации; ожидаемые числовые значения для этой координаты.
dtype DType обрабатываемые этим Distribution.
event_shape Форма отдельной выборки из одной партии в виде TensorShape.

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

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

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

total_concentration Сумма последнего измерения параметра концентрации.
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 Справочник строк/значений аргументов инициализации для переопределения новыми значениями.
END_OF_DOCUMENT_MARKER
Возвращает
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'
)

Форма одного образца из одного пакета как 1-мерный целочисленный массив 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'
)

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

Дополнительная документация из Dirichlet:

Примечание: value должен быть неотрицательным тензором с типом self.dtype и находиться в (self.event_shape() - 1)-симплексе, т.е., tf.reduce_sum(value, -1) = 1. Он должен иметь форму, совместимую с self.batch_shape() + self.event_shape().
Аргументы
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'
)

Мода.

Дополнительная документация от Dirichlet:

Примечание: Мода не определена, когда любые concentration <= 1. Если self.allow_nan_stats является True, NaN используется для неопределённых мод. Если self.allow_nan_stats является False, возникает исключение, когда одна или несколько мод не определены.

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
)

TensorShape формы, используемые для `param_shapes`.

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

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

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

prob

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

prob(
    value, name='prob'
)

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

Дополнительная документация от Dirichlet:

Примечание: value должна быть неотрицательным тензором типа self.dtype и находиться в (self.event_shape() - 1)-симплексе, т.е. tf.reduce_sum(value, -1) = 1. Она должна иметь форму, совместимую с self.batch_shape() + self.event_shape().
Аргументы
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 целочисленное 0D-значение, используемое в качестве начального значения для генератора случайных чисел.
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, добавляемая в имена операций, созданных этой функцией.
Возвращаемое значение
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/Dirichlet

Spec-Zone.ru

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