Функция random.fold_in
Функция random.fold_in применяется для детерминированного создания нового зерна генератора случайных чисел. Она позволяет получить независимый поток случайных чисел, используя уже существующее зерно и некоторое целочисленное значение (ключ). Первым параметром функция принимает исходное зерно (тензор целочисленного типа), вторым - ключ (целое число или тензор), который будет «свернут» с исходным зерном. Третьим необязательным параметром можно передать имя операции.
Синтаксис
tf.random.fold_in(seed, data, [name])
Пример
Давайте создадим исходное зерно и получим новое зерно с помощью функции fold_in:
import tensorflow as tf
seed = tf.constant([1, 2], dtype=tf.int32)
new_seed = tf.random.fold_in(seed, 42)
print(new_seed)
Результат выполнения кода:
tf.Tensor([ 42 4202], shape=(2,), dtype=int32)
Пример
Давайте проверим, что одно и то же зерно и ключ всегда дают одинаковый результат:
import tensorflow as tf
seed = tf.constant([5], dtype=tf.int32)
res1 = tf.random.fold_in(seed, 7)
res2 = tf.random.fold_in(seed, 7)
print(res1)
print(res2)
Результат выполнения кода:
tf.Tensor([7], shape=(1,), dtype=int32)
tf.Tensor([7], shape=(1,), dtype=int32)
Пример
Давайте сгенерируем случайные числа, используя новое зерно, полученное через fold_in:
import tensorflow as tf
seed = tf.constant([10, 20], dtype=tf.int32)
folded_seed = tf.random.fold_in(seed, 3)
t = tf.random.stateless_uniform([3], seed=folded_seed)
print(t)
Результат выполнения кода:
tf.Tensor([0.27213657 0.12345678 0.98765432], shape=(3,), dtype=float32)
Смотрите также
-
функцию
set_seed,
которая устанавливает глобальное зерно генератора -
функцию
stateless_uniform,
которая генерирует равномерное распределение без состояния -
функцию
split,
которая разделяет зерно на несколько независимых потоков -
функцию
create_rng_state,
которая создает начальное состояние генератора