当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python 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
)

参数

  • dtype 事件样本的类型。 None 表示没有 type-enforcement。
  • 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 Distribution 的图形先决条件的 Python list
  • name Python str 名称以此类创建的 Ops 为前缀。默认值:子类名称。

抛出

  • ValueError 如果 graph_parents 的任何成员是 None 或不是 Tensor

属性

  • allow_nan_stats Pythonbool说明未定义统计信息时的行为。

    统计数据在有意义时返回 +/- 无穷大。例如,柯西分布的方差是无穷大的。但是,有时统计数据是未定义的,例如,如果分布的 pdf 在分布的支持范围内没有达到最大值,则模式是未定义的。如果均值未定义,则根据定义,方差未定义。例如: df = 1 的 Student's T 的平均值是未定义的(没有明确的方式说它是 + 或 - 无穷大),因此方差 = E[(X - mean)**2] 也是未定义的。

  • batch_shape 来自单个事件索引的单个样本的形状作为TensorShape.

    可能部分定义或未知。

    批次维度是该分布的独立、不同参数化的索引。

  • dtype TensorDType 由此 Distribution 处理。
  • event_shape 单个批次的单个样品的形状作为TensorShape.

    可能部分定义或未知。

  • name Distribution 创建的所有操作前的名称。
  • parameters 用于实例化此 Distribution 的参数字典。
  • reparameterization_type 说明如何重新参数化分布中的样本。

    目前这是静态实例 distributions.FULLY_REPARAMETERIZEDdistributions.NOT_REPARAMETERIZED 之一。

  • validate_args Python bool 表示启用了可能昂贵的检查。

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 , problog_prob 的参数形状反映了这种广播,samplesample_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 对象的属性,而示例形状与对 samplelog_prob 的特定调用相关联。

有关 TensorFlow Distributions 形状的详细使用示例,请参阅本教程

导致未定义统计或分布的参数值。

某些分布没有针对所有初始化参数值的明确定义的统计信息。例如,beta 分布由正实数 concentration1concentration0 参数化,如果 concentration1 < 1concentration0 < 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()

相关用法


注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.compat.v1.distributions.Distribution。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。