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


Python tf.random.stateless_gamma用法及代码示例


从伽马分布输出确定性伪随机值。

用法

tf.random.stateless_gamma(
    shape, seed, alpha, beta=None, dtype=tf.dtypes.float32, name=None
)

参数

  • shape 一维整数张量或 Python 数组。输出张量的形状。
  • seed 形状 [2] 张量,随机数生成器的种子。必须具有数据类型 int32int64 。 (使用 XLA 时,仅允许使用 int32。)
  • alpha 张量。伽马分布的浓度参数。必须可以使用 beta 进行广播,并且可以使用 shape 的最右侧维度进行广播。
  • beta 张量。伽马分布的逆尺度参数。必须可以使用 alpha 进行广播,并且可以使用 shape 的最右侧维度进行广播。
  • dtype alpha , beta 的浮点数据类型和输出。
  • name 操作的名称(可选)。

返回

  • samples 用随机伽马值填充的指定形状的张量。对于每个 i,每个 `samples[..., i] 都是从具有浓度 alpha[i] 和尺度 beta[i] 的 gamma 分布中独立抽取的。

生成的值遵循具有指定浓度 (alpha) 和反比例 (beta) 参数的伽马分布。

这是tf.random.gamma 的无状态版本:如果使用相同的种子和形状运行两次,它将产生相同的伪随机数。输出在同一硬件(以及 CPU 和 GPU 之间)上的多次运行中是一致的,但可能会在 TensorFlow 版本之间或在非 CPU/GPU 硬件上发生变化。

stateless_gammagamma 之间对 shape 参数的解释存在细微差别:在 gamma 中,shape 始终位于 alphabeta 的广播形状之前;而在 stateless_gamma 中,shape 参数必须始终包含 alphabeta 中的每一个的形状(必须一起广播以匹配 shape 的尾随尺寸)。

注意:因为内部计算是使用 float64 完成的并且强制转换具有 floor 语义,所以我们必须手动将零结果映射到可能的最小正浮点值,即 np.finfo(dtype).tiny 。这意味着np.finfo(dtype).tiny 的发生频率比其他情况要高。这种偏差只会发生在 alpha 的小值,即 alpha << 1beta 的大值,即 beta >> 1

样本是可微的 w.r.t.阿尔法和贝塔。导数是使用 (Figurnov et al., 2018) 中说明的方法计算的。

例子:

samples = tf.random.stateless_gamma([10, 2], seed=[12, 34], alpha=[0.5, 1.5])
# samples has shape [10, 2], where each slice [:, 0] and [:, 1] represents
# the samples drawn from each distribution

samples = tf.random.stateless_gamma([7, 5, 2], seed=[12, 34], alpha=[.5, 1.5])
# samples has shape [7, 5, 2], where each slice [:,:, 0] and [:,:, 1]
# represents the 7x5 samples drawn from each of the two distributions

alpha = tf.constant([[1.], [3.], [5.]])
beta = tf.constant([[3., 4.]])
samples = tf.random.stateless_gamma(
    [30, 3, 2], seed=[12, 34], alpha=alpha, beta=beta)
# samples has shape [30, 3, 2], with 30 samples each of 3x2 distributions.

with tf.GradientTape() as tape:
  tape.watch([alpha, beta])
  loss = tf.reduce_mean(tf.square(tf.random.stateless_gamma(
      [30, 3, 2], seed=[12, 34], alpha=alpha, beta=beta)))
dloss_dalpha, dloss_dbeta = tape.gradient(loss, [alpha, beta])
# unbiased stochastic derivatives of the loss function
alpha.shape == dloss_dalpha.shape  # True
beta.shape == dloss_dbeta.shape  # True

相关用法


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