我有一个具有GB变量的图和一个随机函数(例如VAE)。我希望能够运行一个函数,并始终使用相同的随机序列(例如,输入大量x,并始终获得完全相同的z和y)。
我可以使用随机种子来实现这一目标,这样,每次我从头运行脚本(即初始化会话)时,我总是得到相同的序列。但是,我希望能够在不破坏会话的情况下重置随机序列,因此我可以反复调用我的函数(并获得相同的序列)。销毁和重新初始化会话并不是很理想,因为我丢失了GB的变量,而每次重新加载都是浪费。
再次设置随机种子(tf.set_random_seed)似乎没有影响(我认为tf.set_random_seed中的种子以某种方式与op种子结合并在op中烘焙了吗?)有什么办法解决吗?
我已经阅读了documentation和大量有关张量流中随机种子的帖子(例如TensorFlow: Resetting the seed to a constant value does not yield repeating results,Tensorflow `set_random_seed` not working,TensorFlow: Non-repeatable results,how to get reproducible result in Tensorflow,{ {3}})但是我无法得到我想要的行为。
例如玩具代码
import tensorflow as tf
tf.set_random_seed(0)
a = tf.random_uniform([1], seed=1)
def foo(s, a, msg):
with s.as_default(): print msg, a.eval(), a.eval(), a.eval(), a.eval()
s = tf.Session()
foo(s, a, 'run1 (first session):')
# resetting seed does not reset sequence. is there anything else I can do?
tf.set_random_seed(0)
foo(s, a, 'run2 (same session) :')
# reinitialising session works, but how to do this without closing session and reinitializing?
# and losing GBs of variables which I'd rather not reload
s.close()
s = tf.Session()
foo(s, a, 'run3 (new session) :')
给出结果:
run1 (first session): [ 0.53973019] [ 0.54001355] [ 0.43089259] [ 0.30245078]
run2 (same session) : [ 0.112077] [ 0.99792898] [ 0.17628896] [ 0.13141966]
run3 (new session) : [ 0.53973019] [ 0.54001355] [ 0.43089259] [ 0.30245078]