Метод split класса Generator
Метод split класса Generator позволяет разделить
текущее состояние генератора случайных чисел на заданное
количество независимых потоков. Метод принимает один
обязательный параметр - количество частей, на которое нужно
разбить генератор. Возвращается список объектов Generator,
каждый из которых имеет собственное независимое состояние.
Такой подход полезен, когда нужно получить несколько независимых источников случайности, например, для разных слоев нейронной сети или для параллельных вычислений. Важно, что после вызова метода исходный генератор продолжает существовать, а возвращенные генераторы не зависят друг от друга.
Синтаксис
Generator.split(count)
Пример
Давайте создадим генератор с фиксированным зерном и разобьем его на три независимые части:
import tensorflow as tf
tf.random.set_seed(0)
gen = tf.random.Generator.from_seed(0)
gens = gen.split(3)
print(len(gens))
print(type(gens[0]))
Результат выполнения кода:
3
<class 'tensorflow.python.ops.stateful_random_ops.Generator'>
Пример
Давайте убедимся, что разбитые генераторы выдают разные последовательности случайных чисел:
import tensorflow as tf
tf.random.set_seed(0)
gen = tf.random.Generator.from_seed(0)
gens = gen.split(3)
for g in gens:
print(g.normal([]).numpy())
Результат выполнения кода:
1.5110626
-0.4246769
0.22244024
Пример
Давайте используем разбитые генераторы для создания тензоров с разными значениями:
import tensorflow as tf
tf.random.set_seed(0)
gen = tf.random.Generator.from_seed(0)
gens = gen.split(2)
t1 = gens[0].uniform([5])
t2 = gens[1].uniform([5])
print(t1)
print(t2)
Результат выполнения кода:
tf.Tensor([0.13634598 0.41921532 0.7382531 0.7538868 0.55122733], shape=(5,), dtype=float32)
tf.Tensor([0.6159056 0.20636415 0.85950077 0.17762434 0.12440491], shape=(5,), dtype=float32)