tf.set_random_seed(SEED)
no tiene ningún efecto que pueda decir … Por ejemplo, ejecutar el código siguiente varias veces dentro de una notebook IPython produce una salida diferente cada vez:
import tensorflow as tf tf.set_random_seed(42) sess = tf.InteractiveSession() a = tf.constant([1, 2, 3, 4, 5]) tf.initialize_all_variables().run() a_shuf = tf.random_shuffle(a) print(a.eval()) print(a_shuf.eval()) sess.close()
Si configuro la semilla explícitamente: a_shuf = tf.random_shuffle(a, seed=42)
, la salida es la misma después de cada ejecución. Pero, ¿por qué necesito establecer la semilla si ya llamo tf.set_random_seed(42)
?
El código equivalente que usa numpy simplemente funciona:
import numpy as np np.random.seed(42) a = [1,2,3,4,5] np.random.shuffle(a) print(a)
Eso solo establece la semilla aleatoria a nivel de gráfico. Si ejecuta este fragmento varias veces seguidas, el gráfico cambiará y dos declaraciones aleatorias obtendrán diferentes semillas de nivel de operación. Los detalles se describen en la cadena de documentos para set_random_seed
Para obtener a_shuf
determinista puede:
tf.reset_default_graph()
entre invocaciones o a_shuf = tf.random_shuffle(a, seed=42)