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


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