Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tensorflow`set\u random\u seed`不工作 调用tf.set\u random\u seed(seed)没有任何效果,我可以说。。。_Python_Tensorflow - Fatal编程技术网

Python Tensorflow`set\u random\u seed`不工作 调用tf.set\u random\u seed(seed)没有任何效果,我可以说。。。

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

例如,在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\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这个问题是两年前提出的,获得了更多的选票。为什么它是复制品而不是相反?