Tensorflow `set_random_seed` no funciona

Llamar a 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:

  1. Llame a tf.reset_default_graph() entre invocaciones o
  2. Establezca la semilla de nivel de operación para el orden aleatorio: a_shuf = tf.random_shuffle(a, seed=42)