Spec-Zone.ru › TensorFlow 2.3

tf.random.Generator

Генератор псевдослучайных чисел.

Просмотр псевдонимов

Основные псевдонимы

tf.random.experimental.Generator

Псевдонимы для миграции

См. Руководство по миграции для получения более подробной информации.

tf.compat.v1.random.Generator, tf.compat.v1.random.experimental.Generator

tf.random.Generator(
    copy_from=None, state=None, alg=None
)

Пример:

Создание генератора из семян:

g = tf.random.Generator.from_seed(1234)
g.normal(shape=(2, 3))
<tf.Tensor: shape=(2, 3), dtype=float32, numpy=
array([[ 0.9356609 ,  1.0854305 , -0.93788373],
       [-0.5061547 ,  1.3169702 ,  0.7137579 ]], dtype=float32)>

Создание генератора из недетерминированного состояния:

g = tf.random.Generator.from_non_deterministic_state()
g.normal(shape=(2, 3))
<tf.Tensor: shape=(2, 3), dtype=float32, numpy=...>

Все конструкторы позволяют явно выбрать алгоритм генерации псевдослучайных чисел (RNG). Поддерживаемые алгоритмы — "philox" и "threefry". Например:

g = tf.random.Generator.from_seed(123, alg="philox")
g.normal(shape=(2, 3))
<tf.Tensor: shape=(2, 3), dtype=float32, numpy=
array([[ 0.8673864 , -0.29899067, -0.9310337 ],
       [-1.5828488 ,  1.2481191 , -0.6770643 ]], dtype=float32)>

Процессор, графический процессор и TPU с одним и тем же алгоритмом и семенами будут генерировать одни и те же целые случайные числа. Результаты с плавающей запятой (например, выход normal) могут иметь небольшие числовые расхождения на разных устройствах.

Этот класс использует tf.Variable для управления своим внутренним состоянием. Каждый раз, когда генерируются случайные числа, состояние генератора изменяется. Например:

g = tf.random.Generator.from_seed(1234)
g.state
<tf.Variable ... numpy=array([1234,    0,    0])>
g.normal(shape=(2, 3))
<...>
g.state
<tf.Variable ... numpy=array([2770,    0,    0])>

Форма состояния зависит от алгоритма.

Также есть глобальный генератор:

g = tf.random.get_global_generator()
g.normal(shape=(2, 3))
<tf.Tensor: shape=(2, 3), dtype=float32, numpy=...>
Аргументы
copy_from генератор, который нужно скопировать.
state вектор типа STATE_TYPE, представляющий начальное состояние RNG, длина и семантика которого зависят от алгоритма. Если это переменная, генератор будет её повторно использовать вместо создания новой переменной.
alg алгоритм RNG. Возможные значения — tf.random.Algorithm.PHILOX для алгоритма Philox и tf.random.Algorithm.THREEFRY для алгоритма ThreeFry (см. статью «Параллельные псевдослучайные числа: так просто, как 1, 2, 3» [https://www.thesalmons.org/john/random123/papers/random123sc11.pdf]). Также можно использовать строковые имена "philox" и "threefry". Примечание: PHILOX гарантирует, что на всех архитектурах (CPU, GPU, XLA и т. д.) будут получены одинаковые числа (при одинаковом состоянии генератора).
Атрибуты
algorithm Идентификатор алгоритма RNG (целое число Python или скалярный целочисленный тензор).
key Часть «ключ» состояния генератора на основе счетчика.

Для алгоритма 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]

rng = tf.random.Generator.from_seed(seed=234)
binomial_samples = rng.binomial(shape=[2], counts=counts, probs=probs)


counts = ... # Shape [3, 1, 2]
probs = ...  # Shape [1, 4, 2]
shape = [3, 4, 3, 4, 2]
rng = tf.random.Generator.from_seed(seed=1717)
# Sample shape will be [3, 4, 3, 4, 2]
binomial_samples = rng.binomial(shape=shape, counts=counts, probs=probs)
Аргументы
shape Одномерный целочисленный тензор или массив Python. Формат выходного тензора.
counts Тензор. Значения счетчика биномиального распределения. Должен быть совместим для трансляции с probs, и совместим для трансляции с правыми измерениями shape.
probs Тензор. Вероятность успеха биномиального распределения. Должен быть совместим для трансляции с counts и совместим для трансляции с правыми измерениями 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__ для возможных значений.
Возвращает
Новый генератор.

Исключения:

  • ValueError: если генератор создаётся внутри синхронной стратегии tf.distribute, например MirroredStrategy или TPUStrategy, потому что есть неоднозначность в том, как реплицировать генератор (например, нужно ли копировать его, чтобы каждая репликация получала одинаковые случайные числа, или нужно «разделить» его на разные генераторы, которые генерируют разные случайные числа).

from_non_deterministic_state

Просмотреть исходный код

@classmethod
from_non_deterministic_state(
    alg=None
)

Создаёт генератор, инициализируя его состояние недетерминированно.

Источник недетерминизма будет зависеть от платформы и времени.

Аргументы
alg (необязательно) алгоритм RNG. Если None, будет выбран автоматически. См. __init__ для возможных значений.
Возвращает
Новый генератор.

Исключения:

  • ValueError: если генератор создаётся внутри синхронной стратегии tf.distribute, например MirroredStrategy или TPUStrategy, потому что есть неоднозначность в том, как реплицировать генератор (например, нужно ли копировать его, чтобы каждая репликация получала одинаковые случайные числа, или нужно «разделить» его на разные генераторы, которые генерируют разные случайные числа).

from_seed

Просмотреть исходный код

@classmethod
from_seed(
    seed, alg=None
)

Создаёт генератор из семян.

Семена — 1024-битовое целое без знака, представленное либо целым числом Python, либо вектором целых чисел. Семена, меньшие 1024 бит, будут дополнены. Дополнение, внутренняя структура семян и способ преобразования семян в состояние — всё не определено (неописано). Единственное семантическое требование к семенам — два разных семени, скорее всего, приведут к двум независимым генераторам (но это не гарантируется).

Аргументы
seed семена для RNG.
alg (необязательно) алгоритм RNG. Если None, будет выбран автоматически. См. __init__ для возможных значений.
Возвращает
Новый генератор.

Исключения:

  • ValueError: если генератор создаётся внутри синхронной стратегии tf.distribute, например MirroredStrategy или TPUStrategy, потому что есть неоднозначность в том, как реплицировать генератор (например, нужно ли копировать его, чтобы каждая репликация получала одинаковые случайные числа, или нужно «разделить» его на разные генераторы, которые генерируют разные случайные числа).

from_state

Просмотреть исходный код

@classmethod
from_state(
    state, alg
)

Создаёт генератор из состояния.

См. __init__ для описания state и alg.

Аргументы
state новое состояние.
alg алгоритм RNG.
Возвращает
Новый генератор.

Исключения:

  • ValueError: если генератор создан внутри синхронной tf.distribute стратегии, например MirroredStrategy или TPUStrategy, потому что возникает неоднозначность в том, как дублировать генератор (например, следует ли копировать его так, чтобы каждая репликация получала те же случайные числа, или следует ли «разделить» его на разные генераторы, которые генерируют разные случайные числа).

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 Целочисленный тензор 1-й размерности или массив Python. Форма тензора вывода.
mean 0-мерный тензор или Python-значение типа dtype. Среднее значение нормального распределения.
stddev 0-мерный тензор или Python-значение типа 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).

Для случайных целых чисел с полным диапазоном передайте minval=None и maxval=None с целочисленным значением dtype (для целочисленных типов данных minval и maxval должны быть оба None или оба не None).

Аргументы
shape Целочисленный тензор 1-й размерности или массив Python. Форма тензора вывода.
minval Тензор или Python-значение типа dtype, совместимый по широковещанию с shape (для целочисленных типов широковещательная передача не поддерживается, поэтому она должна быть скаляром). Нижняя граница (включительно) диапазона случайных значений для генерации. Передайте None для целых чисел с полным диапазоном. По умолчанию 0.
maxval Тензор или Python-значение типа dtype, совместимый по широковещанию с shape (для целочисленных типов широковещательная передача не поддерживается, поэтому она должна быть скаляром). Верхняя граница (исключительно) диапазона случайных значений для генерации. Передайте None для целых чисел с полным диапазоном. По умолчанию 1, если dtype — тип с плавающей точкой.
dtype Тип вывода.
name Имя операции (необязательно).
Возвращает
Тензор указанной формы, заполненный случайными равномерными значениями.
Исключения
ValueError Если dtype целочисленный и maxval не указан.

uniform_full_int

Просмотреть исходный код

uniform_full_int(
    shape, dtype=tf.dtypes.uint64, name=None
)

Равномерное распределение по всему диапазону целочисленного типа.

Этот метод эквивалентен установке minval и maxval в None в методе uniform.

Аргументы
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/r2.3/api_docs/python/tf/random/Generator

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API