Python Tensorflow`set\u random\u seed`不工作 调用tf.set\u random\u seed(seed)没有任何效果,我可以说。。。
例如,在IPython笔记本中多次运行下面的代码,每次都会产生不同的输出:Python Tensorflow`set\u random\u seed`不工作 调用tf.set\u random\u seed(seed)没有任何效果,我可以说。。。,python,tensorflow,Python,Tensorflow,例如,在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()
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\u shuffle(a,seed=42)
,每次运行后的输出都是相同的。但是如果我已经调用了tf.set\u random\u seed(42)
,为什么我需要设置种子呢
使用numpy的等效代码只起作用:
import numpy as np
np.random.seed(42)
a = [1,2,3,4,5]
np.random.shuffle(a)
print(a)
这仅设置图形级别的随机种子。如果您在一行中多次执行此代码段,则图形将发生更改,两个shuffle语句将获得不同的操作级别种子。有关详细信息,请参见for
set\u random\u seed
要获得确定性的a_shuf
,您可以
tf.reset\u default\u graph()
,或a\u shuf=tf.random\u shuffle(a,seed=42)
您的代码片段仅显示随机洗牌的一个计算。如何再次运行它以查看不同的结果?(如果我将您的代码片段复制到一个文件
seed.py
并反复运行python seed.py
,我确实会得到相同的结果,并且tf.set\u random\u seed(42)
按预期工作。)@mrry我将上面的代码放在IPython笔记本的一个单元格中。多次运行计算单元会产生不同的结果,即使我期望它是相同的……如果我运行,这也很奇怪!python seed.py
在IPython笔记本中多次运行我会得到相同的结果,但是如果我多次运行%run seed.py
我会得到不同的结果……这是因为每次运行%run seed.py时,您都会将ops附加到现有图中,请尝试打印[n.name for n in tf.get_default_graph().as_graph_def().node]查看您的graph@STJ这个问题是两年前提出的,获得了更多的选票。为什么它是复制品而不是相反?