在Tensorflow中,有没有办法在会话级别设置种子?

在Tensorflow中,有没有办法在会话级别设置种子?,tensorflow,random-seed,binary-reproducibility,Tensorflow,Random Seed,Binary Reproducibility,我试图在运行会话时获得可重复的结果,但希望在会话之间自由更改种子。 大概是这样的: a = tf.random_uniform([1]) #Set seed here to e.g. 123 with tf.Session() as sess: print(sess.run(a)) #Output: A1 print(sess.run(a)) #Output: A2 #Set seed here to e.g. 42 with tf.Session() as sess: p

我试图在运行会话时获得可重复的结果,但希望在会话之间自由更改种子。 大概是这样的:

a = tf.random_uniform([1])

#Set seed here to e.g. 123
with tf.Session() as sess:
   print(sess.run(a)) #Output: A1
   print(sess.run(a)) #Output: A2

#Set seed here to e.g. 42
with tf.Session() as sess:
   print(sess.run(a)) #Output: A3
   print(sess.run(a)) #Output: A4

#Set seed here to e.g. 123
with tf.Session() as sess:
   print(sess.run(a)) #Output: A1
   print(sess.run(a)) #Output: A2
如果我理解了,该方法似乎在图形级别设置种子,因此会话之间的结果将是相同的。事实上,根据该页面,似乎只可能:

  • 使运行不可复制
  • 使单个操作可复制,不可能在会话之间更改(通过直接设置操作种子)
  • 使所有操作可复制,不可能在会话之间更改(使用set_random_seed)

我无法找到任何方法来灵活地更改种子,而不必重新生成图形。任何正确解决方案的建议都将不胜感激

你试过操作级种子吗
tf.random.normal(…,seed=1))
没有在图形级别声明seed。@Sharky很遗憾,这会创建一个新操作。我想保持图形不变,因为在我的实际用例中,随机操作有很多依赖项,我不想重新连接到新的随机操作。那么,如果没有
reset\u default\u graph()
恐怕您无法做到这一点,目前无法做到这一点。随机种子存储为op属性,创建op后不能更改。我已经发布了一些相关问题的答案和评论,如,和,以及一些关于随机数生成在TensorFlow中如何工作的信息,以防您发现它有用。不过,这可能会在TensorFlow 2.0中发生变化,请查看RFC。