Spec-Zone.ru › TensorFlow 2.4

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
)

Пример:

Создание генератора из seed:

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 с одинаковым алгоритмом и seed будут генерировать одинаковые целочисленные случайные числа. Результаты с плавающей точкой (например, вывод 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
)

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

Seed — это 1024-битовое целое без знака, представленное либо целым числом Python, либо вектором целых чисел. Seed'ы короче 1024 бит будут дополнены. Дополнение, внутренняя структура seed'a и способ преобразования seed'a в состояние являются неспецифицированными (непрозрачными). Единственное семантическое указание для seed'ов заключается в том, что два разных seed'a, скорее всего, приведут к двум независимым генераторам (но без гарантии).

Аргументы
seed 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 Целочисленный тензор или массив Python 1-й размерности. Форма выходного тензора.
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 Целочисленный тензор или массив Python 1-й размерности. Форма выходного тензора.
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 Целочисленный тензор или массив Python 1-й размерности. Форма выходного тензора.
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.4/api_docs/python/tf/random/Generator

Spec-Zone.ru

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