當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。