tf.random.stateless_gamma
Выводит детерминированные псевдослучайные значения из гамма-распределения.
tf.random.stateless_gamma(
shape,
seed,
alpha,
beta=None,
dtype=tf.dtypes.float32,
name=None
)
Сгенерированные значения следуют гамма-распределению со значениями концентрации (alpha) и обратной масштабной величиной (beta).
Это бессостоятельная версия tf.random.gamma: если её запустить дважды с одинаковыми seed и формами, она сгенерирует те же псевдослучайные числа. Результат согласован в нескольких запусках на одном оборудовании (и между CPU и GPU), но может меняться между версиями TensorFlow или на оборудовании, не являющемся CPU/GPU.
Существует небольшое различие в интерпретации параметра shape между stateless_gamma и gamma: в gamma параметр shape всегда добавляется в начало формы широковещательной передачи alpha с beta; в то время как в stateless_gamma параметр shape всегда должен охватывать формы каждого из alpha и beta (которые должны быть широковещательно переданы вместе, чтобы соответствовать последним измерениям shape).
Примечание: Поскольку внутренние вычисления выполняются с использованиемfloat64, а преобразование имеетfloorсемантику, мы должны вручную сопоставить нулевые результаты с наименьшим возможным положительным значением с плавающей точкой, т.е.np.finfo(dtype).tiny. Это означает, чтоnp.finfo(dtype).tinyпроисходит чаще, чем должно быть. Это смещение может происходить только для малых значенийalpha, т.е.alpha << 1, или больших значенийbeta, т.е.beta >> 1.
Образцы дифференцируемы по отношению к alpha и beta. Производные вычисляются с помощью подхода, описанного в (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
| Аргументы | |
|---|---|
shape | Целочисленный тензор 1-D или массив Python. Форма выходного тензора. |
seed | Тензор формы [2], seed генератора случайных чисел. Должен иметь тип int32 или int64. (При использовании XLA, разрешается только int32.) |
alpha | Тензор. Параметр концентрации гамма-распределения. Должен быть совместим с широковещательной передачей с beta и совместим с широковещательной передачей с правыми измерениями shape. |
beta | Тензор. Параметр обратного масштаба гамма-распределения. Должен быть совместим с широковещательной передачей с alpha и совместим с широковещательной передачей с правыми измерениями shape. |
dtype | Тип с плавающей точкой для alpha, beta и выходного значения. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
samples | Тензор заданной формы, заполненный случайными значениями гамма-распределения. Для каждого i, каждый `samples[..., i]` является независимым выбором из гамма-распределения с концентрацией alpha[i] и масштабом beta[i]. |
© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/api_docs/python/tf/random/stateless_gamma