Tensorflow `set_random_seed` не работает

Вызов tf.set_random_seed(SEED) не влияет, что я могу сказать...

Например, запуск кода ниже нескольких раз внутри ноутбука IPython каждый раз производит различный вывод:

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

Если я задал семя явно: a_shuf = tf.random_shuffle(a, seed=42), результат будет таким же после каждого прогона. Но зачем мне устанавливать семя, если я уже звоню tf.set_random_seed(42)?


Эквивалентный код с использованием numpy просто работает:

import numpy as np
np.random.seed(42)
a = [1,2,3,4,5]
np.random.shuffle(a)
print(a)

Ответ 1

Это устанавливает только случайное семя уровня графа. Если вы выполните этот фрагмент несколько раз подряд, график изменится, и два оператора тасования получат разные семплы уровня операций. Подробности описаны в doc string для set_random_seed

Чтобы получить детерминированный a_shuf, вы можете либо

  • Вызов tf.reset_default_graph() между вызовами или
  • Задайте начальное значение рабочего пространства для тасования: a_shuf = tf.random_shuffle(a, seed=42)