Esta página foi traduzida pela API Cloud Translation.
Switch to English

tf.random.Generator

Ver fonte no GitHub

Gerador de números aleatórios.

Usado nos cadernos

Usado na guia

Exemplo:

Criando um gerador de uma semente:

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)>

Criando um gerador de um estado não-determinístico:

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

Todos os construtores permitem escolher explicitamente um algoritmo de números aleatórios-Geração (RNG). Algoritmos suportados são "philox" e "threefry" . Por exemplo:

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)>

CPU, GPU e TPU com o mesmo algoritmo e semente vai gerar os números aleatórios mesmo número inteiro. Os resultados dos pontos-flutuador (tais como a saída normal ) pode ter pequenas diferenças numéricas entre dispositivos diferentes.

Essa classe usa um tf.Variable para gerir o seu estado interno. Toda vez que números aleatórios são gerados, o estado do gerador vai mudar. Por exemplo:

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])>

A forma do estado é específico do algoritmo.

Há também um gerador mundial:

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

copy_from um gerador para ser copiado.
state um vector de dtipo tipo_dado_estado que representa o estado inicial do RNG, cujo comprimento e semântica são algoritmo específico. Se é uma variável, o gerador irá reutilizá-lo em vez de criar uma nova variável.
alg o algoritmo RNG. Os valores possíveis são tf.random.Algorithm.PHILOX para o algoritmo Philox e tf.random.Algorithm.THREEFRY para o algoritmo ThreeFry (ver documento 'paralelo números aleatórios: tão fácil como 1, 2, 3' [https: // www. thesalmons.org/john/random123/papers/random123sc11.pdf]). Os nomes de cadeia "philox" e "threefry" também pode ser usado. Nota PHILOX garante os mesmos números são produzidos (dado o mesmo estado aleatório) em todas as arquiteturas (CPU, GPU, XLA etc).

algorithm O ID de algoritmo RNG (um inteiro Python ou escalar inteiro Tensor).
key A parte 'chave' do estado de um RNG contra-base.

Para um algoritmo RNG contra-base, tal como Philox e ThreeFry (como descrito no documento 'paralelo Random Numbers: tão fácil como 1, 2, 3' [ https://www.thesalmons.org/john/random123/papers/random123sc11. pdf ]), o estado RNG consiste em duas partes: contador e chave. A saída é gerada por meio da fórmula: = Hash saída (chave, contador) de hashing, isto é, um do contador parametrizada pela chave. Dois RNG com duas chaves diferentes pode ser pensado como gerar dois fluxos de números aleatórios independentes (um fluxo é formado através do aumento do contador).

state O estado interno do RNG.

Métodos

binomial

Ver fonte

Saídas valores aleatórios a partir de uma distribuição binomial.

Os valores gerados seguem uma distribuição binomial com contagem especificada e probabilidade de parâmetros de sucesso.

Exemplo:

 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)
 

args
shape Um 1-D inteiro matriz Tensor ou Python. A forma do tensor de saída.
counts Tensor. As contagens da distribuição binomial. Deve ser irradiável com probs , e irradiável com as dimensões mais à direita de shape .
probs Tensor. A probabilidade de sucesso para a distribuição binomial. Deve ser irradiável com counts e irradiável com as dimensões mais à direita de shape .
dtype O tipo da saída. Padrão: tf.int32
name Um nome para a operação (opcional).

Devoluções
samples Um tensor da forma especificada preenchido com valores aleatórios binomial. Para cada i, cada um amostras [i, ...] é um sorteio independente da distribuição binomial na contagem [i] ensaios com probabilidade de probs sucesso [i].

from_key_counter

Ver fonte

Cria um gerador de uma chave e um contador.

Este construtor só se aplica se o algoritmo é um algoritmo de contra-base. Veja o método key para o significado de "chave" e "contra".

args
key a chave para a RNG, um escalar do tipo tipo_dado_estado.
counter um vector de dtipo tipo_dado_estado representando o contador inicial para o RNG, cujo comprimento é algoritmo específico.,
alg o algoritmo RNG. Se None, será selecionada automaticamente. Veja __init__ para seus possíveis valores.

Devoluções
O novo gerador.

lança:

  • ValueError : se o gerador é criado dentro de um síncrono tf.distribute estratégia tais como MirroredStrategy ou TPUStrategy , porque não há ambigüidade sobre como replicar um gerador (por exemplo, ele deve ser copiado de modo tal cada réplica vai obter os mesmos números aleatórios, ou deve ser "split" em diferentes geradores que geram diferentes números aleatórios).

from_non_deterministic_state

Ver fonte

Cria um gerador por não-determinística inicializar seu estado.

A fonte do não-determinismo será plataforma e dependente do tempo.

args
alg (Opcional) o algoritmo RNG. Se None, será selecionada automaticamente. Veja __init__ para seus possíveis valores.

Devoluções
O novo gerador.

lança:

  • ValueError : se o gerador é criado dentro de um síncrono tf.distribute estratégia tais como MirroredStrategy ou TPUStrategy , porque não há ambigüidade sobre como replicar um gerador (por exemplo, ele deve ser copiado de modo tal cada réplica vai obter os mesmos números aleatórios, ou deve ser "split" em diferentes geradores que geram diferentes números aleatórios).

from_seed

Ver fonte

Cria um gerador a partir de uma semente.

Uma semente é um inteiro sem sinal de 1024 bits representada quer como um número inteiro Python ou um vector de números in