一个通用的概率分布基类。
用法
tf.compat.v1.distributions.Distribution(
dtype, reparameterization_type, validate_args, allow_nan_stats, parameters=None,
graph_parents=None, name=None
)
参数
-
dtype
事件样本的类型。None
表示没有 type-enforcement。 -
reparameterization_type
ReparameterizationType
的实例。如果distributions.FULLY_REPARAMETERIZED
,则此Distribution
可以根据某些标准分布重新参数化,该函数的雅可比为常数以支持标准分布。如果distributions.NOT_REPARAMETERIZED
,则没有这样的重新参数化可用。 -
validate_args
Pythonbool
,默认False
。尽管可能会降低运行时性能,但检查True
分发参数的有效性时。当False
无效输入可能会默默呈现不正确的输出。 -
allow_nan_stats
Pythonbool
,默认True
。当True
时,统计信息(例如,均值、众数、方差)使用值“NaN
”来指示结果未定义。当False
时,如果一个或多个统计数据的批处理成员未定义,则会引发异常。 -
parameters
Pythondict
用于实例化此Distribution
的参数。 -
graph_parents
此Distribution
的图形先决条件的 Pythonlist
。 -
name
Pythonstr
名称以此类创建的 Ops 为前缀。默认值:子类名称。
抛出
-
ValueError
如果 graph_parents 的任何成员是None
或不是Tensor
。
属性
-
allow_nan_stats
Pythonbool
说明未定义统计信息时的行为。统计数据在有意义时返回 +/- 无穷大。例如,柯西分布的方差是无穷大的。但是,有时统计数据是未定义的,例如,如果分布的 pdf 在分布的支持范围内没有达到最大值,则模式是未定义的。如果均值未定义,则根据定义,方差未定义。例如: df = 1 的 Student's T 的平均值是未定义的(没有明确的方式说它是 + 或 - 无穷大),因此方差 = E[(X - mean)**2] 也是未定义的。
-
batch_shape
来自单个事件索引的单个样本的形状作为TensorShape
.可能部分定义或未知。
批次维度是该分布的独立、不同参数化的索引。
-
dtype
Tensor
的DType
由此Distribution
处理。 -
event_shape
单个批次的单个样品的形状作为TensorShape
.可能部分定义或未知。
-
name
此Distribution
创建的所有操作前的名称。 -
parameters
用于实例化此Distribution
的参数字典。 -
reparameterization_type
说明如何重新参数化分布中的样本。目前这是静态实例
distributions.FULLY_REPARAMETERIZED
或distributions.NOT_REPARAMETERIZED
之一。 -
validate_args
Pythonbool
表示启用了可能昂贵的检查。
Distribution
是用于构建和组织随机变量(例如,伯努利、高斯)的属性(例如,均值、方差)的基类。
子类化
子类应实现same-named 函数的leading-underscore 版本。除了省略 name="..."
之外,参数签名应该相同。例如,要启用 log_prob(value,
name="log_prob")
子类应该实现 _log_prob(value)
。
子类可以通过为其方法特化提供文档字符串来附加到public-level 文档字符串。例如:
@util.AppendDocstring("Some other details.")
def _log_prob(self, value):
...
将添加字符串“一些其他详细信息”。到log_prob
函数文档字符串。这是作为一个简单的装饰器实现的,以避免 python linter 抱怨部分文档字符串中缺少 Args/Returns/Raises 部分。
广播、批处理和形状
所有发行版都支持该类型的成批独立发行版。批量形状是通过一起广播参数来确定的。
__init__
, cdf
, log_cdf
, prob
和 log_prob
的参数形状反映了这种广播,sample
和 sample_n
的返回值也是如此。
sample_n_shape = [n] + batch_shape + event_shape
,其中 sample_n_shape
是从 sample_n
, n
返回的 Tensor
的形状,是样本数,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]
。 - 批量形状说明了独立的、不同分布的绘制,也就是 "collection" 或 "bunch" 的分布。
- 样本形状说明了来自分布族的独立、相同分布的批次抽取。
事件形状和批处理形状是 Distribution 对象的属性,而示例形状与对 sample
或 log_prob
的特定调用相关联。
有关 TensorFlow Distributions 形状的详细使用示例,请参阅本教程
导致未定义统计或分布的参数值。
某些分布没有针对所有初始化参数值的明确定义的统计信息。例如,beta 分布由正实数 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()
相关用法
- Python tf.compat.v1.distributions.Distribution.variance用法及代码示例
- Python tf.compat.v1.distributions.Distribution.cdf用法及代码示例
- Python tf.compat.v1.distributions.Distribution.quantile用法及代码示例
- Python tf.compat.v1.distributions.Distribution.log_cdf用法及代码示例
- Python tf.compat.v1.distributions.Distribution.survival_function用法及代码示例
- Python tf.compat.v1.distributions.Distribution.log_survival_function用法及代码示例
- Python tf.compat.v1.distributions.Distribution.covariance用法及代码示例
- Python tf.compat.v1.distributions.Distribution.stddev用法及代码示例
- Python tf.compat.v1.distributions.Distribution.cross_entropy用法及代码示例
- Python tf.compat.v1.distributions.Distribution.kl_divergence用法及代码示例
- Python tf.compat.v1.distributions.Dirichlet.covariance用法及代码示例
- Python tf.compat.v1.distributions.Dirichlet.stddev用法及代码示例
- Python tf.compat.v1.distributions.Dirichlet.kl_divergence用法及代码示例
- Python tf.compat.v1.distributions.Dirichlet.cross_entropy用法及代码示例
- Python tf.compat.v1.distributions.DirichletMultinomial.log_survival_function用法及代码示例
- Python tf.compat.v1.distributions.DirichletMultinomial.survival_function用法及代码示例
- Python tf.compat.v1.distributions.DirichletMultinomial.quantile用法及代码示例
- Python tf.compat.v1.distributions.Dirichlet.cdf用法及代码示例
- Python tf.compat.v1.distributions.Dirichlet.survival_function用法及代码示例
- Python tf.compat.v1.distributions.DirichletMultinomial.log_cdf用法及代码示例
注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.compat.v1.distributions.Distribution。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。