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


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


从每个给定的 Gamma 分布中抽取 shape 样本。

用法

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

参数

  • shape 一维整数张量或 Python 数组。每个 alpha/beta-parameterized 分布要绘制的输出样本的形状。
  • alpha 张量或 Python 值或 dtype 类型的 N-D 数组。 alpha 提供说明要采样的伽马分布的形状参数。必须可以使用 beta 进行广播。
  • beta 张量或 Python 值或 dtype 类型的 N-D 数组。默认为 1。beta 提供要采样的伽马分布的反比例参数。必须可以使用 alpha 进行广播。
  • dtype alpha、beta 的类型和输出:float16 , float32float64
  • seed 一个 Python 整数。用于为分布创建随机种子。有关行为,请参见tf.random.set_seed
  • name 操作的可选名称。

返回

  • samples 形状为 tf.concat([shape, tf.shape(alpha + beta)], axis=0)Tensor ,其值类型为 dtype

alpha 是说明分布的形状参数,beta 是逆尺度参数。

注意:因为内部计算是使用 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.gamma([10], [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.gamma([7, 5], [0.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.gamma([30], alpha=alpha, beta=beta)
# samples has shape [30, 3, 2], with 30 samples each of 3x2 distributions.

loss = tf.reduce_mean(tf.square(samples))
dloss_dalpha, dloss_dbeta = tf.gradients(loss, [alpha, beta])
# unbiased stochastic derivatives of the loss function
alpha.shape == dloss_dalpha.shape  # True
beta.shape == dloss_dbeta.shape  # True

参考:

隐式重新参数化梯度:Figurnov 等人,2018 (pdf)

相关用法


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