tf.random.experimental.Generator
Генератор псевдослучайных чисел.
Наследуется от: Checkpointable
tf.random.experimental.Generator(
copy_from=None, state=None, alg=None
)
Использует переменную для управления внутренним состоянием и позволяет выбирать алгоритм генерации псевдослучайных чисел (RNG).
CPU, GPU и TPU с тем же алгоритмом и начальным значением генерируют одни и те же целые псевдослучайные числа. Результаты с плавающей запятой (например, результат normal) могут иметь небольшие числовые расхождения между CPU и GPU.
| Аргументы | |
|---|---|
copy_from | генератор, который нужно скопировать. |
state | вектор типа STATE_TYPE, представляющий начальное состояние RNG, длина и семантика которого зависят от алгоритма. |
alg | алгоритм RNG. Возможные значения — RNG_ALG_PHILOX для алгоритма Philox и RNG_ALG_THREEFRY для алгоритма ThreeFry (см. статью «Параллельные псевдослучайные числа: так просто, как 1, 2, 3» [https://www.thesalmons.org/john/random123/papers/random123sc11.pdf]). Примечание: RNG_ALG_PHILOX гарантирует, что одинаковые числа генерируются (при одинаковом состоянии случайности) на всех архитектурах (CPU, GPU, XLA и т. д.). |
| Атрибуты | |
|---|---|
algorithm | Алгоритм RNG. |
key | Часть «ключ» состояния RNG на основе счётчика. Для алгоритма RNG на основе счётчика, такого как Philox и ThreeFry (как описано в статье «Параллельные псевдослучайные числа: так просто, как 1, 2, 3» [https://www.thesalmons.org/john/random123/papers/random123sc11.pdf]), состояние RNG состоит из двух частей: счётчика и ключа. Выход генерируется по формуле: output=hash(key, counter), т. е. хеширование счётчика, параметризованного ключом. Два RNG с двумя различными ключами можно рассматривать как генерирующие два независимых потока случайных чисел (поток формируется путём увеличения счётчика). |
state | Внутреннее состояние RNG. |
Методы
binomial
binomial(
shape, counts, probs, dtype=tf.dtypes.int32, name=None
)
Выводит случайные значения из биномиального распределения.
Сгенерированные значения следуют биномиальному распределению с заданными параметрами количества испытаний и вероятности успеха.
Пример:
counts = [10., 20.] # Probability of success. probs = [0.8, 0.9] rng = tf.random.experimental.Generator.from_seed(seed=234) binomial_samples = rng.binomial(shape=[2], counts=counts, probs=probs)
| Аргументы | |
|---|---|
shape | Целочисленный тензор или массив Python размерности 1. Форма выходного тензора. |
counts | Тензор или значение Python размерности 0/1. Количество испытаний биномиального распределения. Должен быть совместим по транспонированию с самым левым измерением, определённым shape. |
probs | Тензор или значение Python размерности 0/1. Вероятность успеха для биномиального распределения. Должен быть совместим по транспонированию с самым левым измерением, определённым shape. |
dtype | Тип выходного значения. По умолчанию: tf.int32 |
name | Название операции (необязательно). |
| Возвращаемое значение | |
|---|---|
samples | Тензор заданной формы, заполненный случайными биномиальными значениями. Для каждого i, каждый элемент samples[i, ...] — независимое значение из биномиального распределения на counts[i] испытаниях с вероятностью успеха probs[i]. |
from_key_counter
@classmethod
from_key_counter(
key, counter, alg
)
Создаёт генератор по ключу и счётчику.
Этот конструктор применяется только в случае алгоритма на основе счётчика. См. метод key для значения «ключа» и «счётчика».
| Аргументы | |
|---|---|
key | ключ для RNG, скаляр типа STATE_TYPE. |
counter | вектор типа STATE_TYPE, представляющий начальный счётчик RNG, длина которого зависит от алгоритма. |
alg | алгоритм RNG. Если None, будет выбран автоматически. См. __init__ для возможных значений. |
| Возвращаемое значение | |
|---|---|
| Новый генератор. |
from_non_deterministic_state
@classmethod
from_non_deterministic_state(
alg=None
)
Создаёт генератор, не определяя состояние.
Источник не определения будет зависеть от платформы и времени.
| Аргументы | |
|---|---|
alg | (необязательно) алгоритм RNG. Если None, будет выбран автоматически. См. __init__ для возможных значений. |
| Возвращаемое значение | |
|---|---|
| Новый генератор. |
from_seed
@classmethod
from_seed(
seed, alg=None
)
Создаёт генератор из начального значения.
Начальное значение — 1024-битовое беззнаковое целое число, представленное либо как целое число Python, либо как вектор целых чисел. Значения начального значения, меньшие 1024 бит, будут дополнены. Заполнение, внутренняя структура начального значения и способ преобразования начального значения в состояние — всё это не определено. Единственная семантика начального значения — два разных начальных значения, скорее всего, приведут к двум независимым генераторам (но это не гарантируется).
| Аргументы | |
|---|---|
seed | начальное значение для RNG. |
alg | (необязательно) алгоритм RNG. Если None, будет выбран автоматически. См. __init__ для возможных значений. |
| Возвращаемое значение | |
|---|---|
| Новый генератор. |
from_state
@classmethod
from_state(
state, alg
)
Создаёт генератор из состояния.
См. __init__ для описания state и alg.
| Аргументы | |
|---|---|
state | новое состояние. |
alg | алгоритм RNG. |
| Возвращаемое значение | |
|---|---|
| Новый генератор. |
make_seeds
make_seeds(
count=1
)
Генерирует начальные значения для бессостоятельных операций случайности.
Например:
seeds = get_global_generator().make_seeds(count=10) for i in range(10): seed = seeds[:, i] numbers = stateless_random_normal(shape=[2, 3], seed=seed) ...
| Аргументы | |
|---|---|
count | количество пар начальных значений (примечание: бессостоятельные операции случайности требуют пары начальных значений для вызова). |
| Возвращаемое значение | |
|---|---|
| Тензор формы [2, count] и типа int64. |
normal
normal(
shape, mean=0.0, stddev=1.0, dtype=tf.dtypes.float32, name=None
)
Выводит случайные значения из нормального распределения.
| Аргументы | |
|---|---|
shape | Целочисленный тензор или массив Python размерности 1. Форма выходного тензора. |
mean | Тензор или значение Python размерности 0 типа dtype. Математическое ожидание нормального распределения. |
stddev | Тензор или значение Python размерности 0 типа dtype. Стандартное отклонение нормального распределения. |
dtype | Тип выходного значения. |
name | Название операции (необязательно). |
| Возвращаемое значение | |
|---|---|
| Тензор заданной формы, заполненный случайными значениями из нормального распределения. |
reset
reset(
state
)
Сбрасывает генератор новым состоянием.
См. __init__ для значения «состояния».
| Аргументы | |
|---|---|
state | новое состояние. |
reset_from_key_counter
reset_from_key_counter(
key, counter
)
Сброс генератора с помощью новой пары ключ-счётчик.
См. from_key_counter для значения «ключ» и «счётчик».
| Аргументы | |
|---|---|
key | новый ключ. |
counter | новый счётчик. |
reset_from_seed
reset_from_seed(
seed
)
Сброс генератора с помощью нового значения.
См. from_seed для значения «семя».
| Аргументы | |
|---|---|
seed | новое семя. |
skip
skip(
delta
)
Передвинуть счётчик генератора с учётом счётчика.
| Аргументы | |
|---|---|
delta | величина продвижения. Состояние генератора после skip(n) будет таким же, как после normal([n]) (или любого другого распределения). Фактическое приращение, добавленное к счётчику, — это неопределённая деталь реализации. |
split
split(
count=1
)
Возвращает список независимых объектов Generator.
Два генератора независимы друг от друга в том смысле, что потоки случайных чисел, которые они генерируют, не имеют статистически обнаруживаемых корреляций. Новые генераторы также независимы от старого. Состояние старого генератора будет изменено (как и другие методы генерации случайных чисел), поэтому два вызова split вернут разные новые генераторы.
Например:
gens = get_global_generator().split(count=10) for gen in gens: numbers = gen.normal(shape=[2, 3]) # ... gens2 = get_global_generator().split(count=10) # gens2 will be different from gens
Новые генераторы будут помещены на текущий устройство (возможно, отличное от устройства старого генератора), например:
with tf.device("/device:CPU:0"):
gen = Generator(seed=1234) # gen is on CPU
with tf.device("/device:GPU:0"):
gens = gen.split(count=10) # gens are on GPU
| Аргументы | |
|---|---|
count | количество возвращаемых генераторов. |
| Возвращаемое значение | |
|---|---|
Список (длина count) объектов Generator, независимых друг от друга. У новых генераторов используется тот же алгоритм генерации псевдослучайных чисел, что и у старого. |
truncated_normal
truncated_normal(
shape, mean=0.0, stddev=1.0, dtype=tf.dtypes.float32, name=None
)
Выводит случайные значения из усеченного нормального распределения.
Сгенерированные значения следуют нормальному распределению со заданным средним значением и стандартным отклонением, за исключением того, что значения, чья величина больше, чем 2 стандартных отклонения от среднего, отбрасываются и выбираются заново.
| Аргументы | |
|---|---|
shape | 1-мерный целочисленный тензор или Python-массив. Форма выходного тензора. |
mean | 0-мерный тензор или Python-значение типа dtype. Среднее значение усеченного нормального распределения. |
stddev | 0-мерный тензор или Python-значение типа dtype. Стандартное отклонение нормального распределения до усечения. |
dtype | Тип выходного значения. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
| Тензор заданной формы, заполненный случайными усеченными нормальными значениями. |
uniform
uniform(
shape, minval=0, maxval=None, dtype=tf.dtypes.float32, name=None
)
Выводит случайные значения из равномерного распределения.
Сгенерированные значения следуют равномерному распределению в диапазоне [minval, maxval). Нижняя граница minval включается в диапазон, а верхняя граница maxval исключается. (Для чисел с плавающей точкой, особенно для типов с низкой точностью, таких как bfloat16, из-за округления результат иногда может включать maxval.)
Для чисел с плавающей точкой, по умолчанию, диапазон — [0, 1). Для целых чисел, по крайней мере, maxval должен быть указан явно.
В случае целых чисел случайные целые числа несколько смещены, если maxval - minval не является точной степенью двойки. Смещение мало для значений maxval - minval значительно меньших, чем диапазон выходных данных (либо 2**32, либо 2**64).
| Аргументы | |
|---|---|
shape | 1-мерный целочисленный тензор или Python-массив. Форма выходного тензора. |
minval | 0-мерный тензор или Python-значение типа dtype. Нижняя граница диапазона генерируемых случайных значений. По умолчанию 0. |
maxval | 0-мерный тензор или Python-значение типа dtype. Верхняя граница диапазона генерируемых случайных значений. По умолчанию 1, если dtype с плавающей точкой. |
dtype | Тип выходного значения. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
| Тензор заданной формы, заполненный случайными равномерными значениями. |
| Исключения | |
|---|---|
ValueError | Если dtype целочисленный и maxval не указан. |
uniform_full_int
uniform_full_int(
shape, dtype=tf.dtypes.uint64, name=None
)
Равномерное распределение по всему диапазону целочисленного типа.
Другой метод uniform охватывает только диапазон [minval, maxval), который не может охватить весь диапазон dtype, поскольку maxval типа dtype.
| Аргументы | |
|---|---|
shape | форма выходного значения. |
dtype | (необязательно) целочисленный тип, по умолчанию uint64. |
name | (необязательно) имя узла. |
| Возвращаемое значение | |
|---|---|
| Тензор со случайными числами требуемой формы. |
© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/random/experimental/Generator