Spec-Zone.ru › TensorFlow 1.15

tf.contrib.distributions.Mixture

Смешанное распределение.

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

tf.contrib.distributions.Mixture(
    cat, components, validate_args=False, allow_nan_stats=True,
    use_static_graph=False, name='Mixture'
)

Объект Mixture реализует пакетные смешанные распределения. Модель смеси определяется распределением Categorical (смесью) и списком Python объектов Distribution.

Поддерживаемые методы включают log_prob, prob, mean, sample, и entropy_lower_bound.

Примеры

# Create a mixture of two Gaussians:
import tensorflow_probability as tfp
tfd = tfp.distributions

mix = 0.3
bimix_gauss = tfd.Mixture(
  cat=tfd.Categorical(probs=[mix, 1.-mix]),
  components=[
    tfd.Normal(loc=-1., scale=0.1),
    tfd.Normal(loc=+1., scale=0.5),
])

# Plot the PDF.
import matplotlib.pyplot as plt
x = tf.linspace(-2., 3., int(1e4)).eval()
plt.plot(x, bimix_gauss.prob(x).eval());
Аргументы
cat Экземпляр распределения Categorical, представляющий вероятности distributions.
components Список или кортеж экземпляров Distribution. Каждый экземпляр должен иметь одинаковый тип, быть определён на одной области определения и иметь соответствующие event_shape и batch_shape.
validate_args Python bool, по умолчанию False. Если True, вызовите исключение времени выполнения, если ранг пакетной или событийной части не соответствует cat или любому из распределений. Это проверяется только если ранги не могут быть определены статически во время построения графика.
allow_nan_stats Булево значение, по умолчанию True. Если False, вызовите исключение, если статистика (например, среднее значение/мода и т.д.) не определена для любого элемента пакетной обработки. Если True, элементы пакетной обработки с допустимыми параметрами, приводящими к неопределённой статистике, вернут NaN для этой статистики.
use_static_graph Вызовы sample не будут полагаться на динамический индексирование тензоров, что позволит оптимизировать некоторые статические компиляции графов, но при этом будет происходить выборка всех базовых распределений в смеси. (Возможно, полезно при работе с TPUs). Значение по умолчанию: False (т.е., использовать динамический индексирование).
name Название данного распределения (необязательно).
Исключения
TypeError Если cat не является Categorical, или components не является списком или кортежем, или элементы components не являются экземплярами Distribution, или не имеют соответствующих dtype.
ValueError Если components является пустым списком или кортежем, или его элементы не имеют статически известного ранга событий. Если cat.num_classes не может быть выведен во время создания графика, или постоянное значение cat.num_classes не равно len(components), или все components и cat не имеют соответствующих статических форм пакетов, или все компоненты не имеют соответствующих статических форм событий.
Атрибуты
allow_nan_stats Python bool описывающий поведение при неопределённой статистике.

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

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

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

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

cat
components
dtype Распределение DType элементов, обрабатываемых этим Distribution.
event_shape Форма одного образца из одного пакета в виде TensorShape.

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

name Имя, добавляемое в префикс ко всем операциям, созданным этим Distribution.
num_components
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.

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

entropy

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

entropy(
    name='entropy'
)

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

entropy_lower_bound

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

entropy_lower_bound(
    name='entropy_lower_bound'
)

Нижняя граница энтропии этой смешанной модели.

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

Нижняя граница полезна для ELBO, когда Mixture является вариационным распределением:

\( \log p(x) >= ELBO = \int q(z) \log p(x, z) dz + H[q] \)

где \( p \) — базовое распределение, \( q \) — вариационное, а \( H[q] \) — энтропия \( q \). Если существует нижняя граница \( G[q] \) такая, что \( H[q] \geq G[q] \), то её можно использовать вместо \( H[q] \).

Для смеси распределений \( q(Z) = \sum_i c_i q_i(Z) \) с \( \sum_i c_i = 1 \), из-за вогнутости \( f(x) = -x \log x \), простая нижняя граница имеет вид:

\( \begin{align} H[q] & = - \int q(z) \log q(z) dz \\\ & = - \int (\sum_i c_i q_i(z)) \log(\sum_i c_i q_i(z)) dz \\\ & \geq - \sum_i c_i \int q_i(z) \log q_i(z) dz \\\ & = \sum_i c_i H[q_i] \end{align} \)

Это значение, которое мы вычисляем ниже для \( G[q] \).

Аргументы
name Имя для данной операции (необязательно).
Возвращаемое значение
Нижняя граница энтропии смешанного распределения.

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

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

Spec-Zone.ru

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