Spec-Zone.ru › TensorFlow 1.15

tf.distributions.Dirichlet

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

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

Просмотр псевдонимов

Основные псевдонимы

`tf.contrib.distributions.Dirichlet`

Псевдонимы для миграции

См. Руководство по миграции для получения дополнительных сведений.

tf.compat.v1.distributions.Dirichlet

tf.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 перед вычислением плотности.

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

Michael Figurnov, Shakir Mohamed, Andriy Mnih. Implicit Reparameterization Gradients, 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)
Аргументы
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 - mean)**2] также не определена.

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

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

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

concentration Параметр концентрации; ожидаемое количество для данной координаты.
dtype DType Tensor обрабатываются этим 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 Словарь строка/значение аргументов инициализации, которые необходимо переопределить новыми значениями.
Возвращаемое значение
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, добавляемая в префикс имен операций, созданных этой функцией.
Возвращаемое значение
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, добавляемая в префикс имен операций, созданных этой функцией.
Возвращаемое значение
is_scalar_batch скалярное значение bool Tensor.

is_scalar_event

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

is_scalar_event(
    name='is_scalar_event'
)

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

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

END_OF_DOCUMENT_MARKER

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

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

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

data-text="param_static_shapes" id="param_static_shapes" tabindex="0">param_static_shapes

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

@classmethod
param_static_shapes(
    sample_shape
)

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

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

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

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

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

data-text="quantile" id="quantile" tabindex="0">quantile

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

quantile(
    value, name='quantile'
)

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

Для случайной величины X и p in [0, 1], квантиль равен:

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

data-text="sample" id="sample" tabindex="0">sample

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

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

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

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

class="responsive fixed orange">
Аргументы
sample_shape 0D или 1D тензор int32 Tensor. Форма генерируемых выборок.
seed Python-целое число, семя для генератора псевдослучайных чисел.
name имя для операции.
class="responsive fixed orange">
Возвращает
samples тензор с добавленными измерениями sample_shape.

data-text="stddev" id="stddev" tabindex="0">stddev

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

stddev(
    name='stddev'
)

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

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

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

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

class="responsive fixed orange">
Аргументы
name Python-строка для добавления к именам операций, созданных этой функцией.
class="responsive fixed orange">
Возвращает
stddev число с плавающей запятой Tensor с формой, идентичной batch_shape + event_shape, т.е. той же формой, что и self.mean().

data-text="survival_function" id="survival_function" tabindex="0">survival_function

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

survival_function(
    value, name='survival_function'
)

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

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

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

data-text="variance" id="variance" tabindex="0">variance

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

variance(
    name='variance'
)

Дисперсия.

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

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

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

class="responsive fixed orange">
Аргументы
name Python-строка для добавления к именам операций, созданных этой функцией.
class="responsive fixed orange">
Возвращает
variance число с плавающей запятой Tensor с формой, идентичной 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/distributions/Dirichlet

Spec-Zone.ru

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