问题
我对randomness的Tensorflow文档感到困惑,因为它与tf.Dataset.shuffle
的文档有关。
具体来说,我正在寻找一种方法来维持不同运行中的确定性行为,这样每次运行程序时我都可以获得相同的结果,但仍然想在每个新纪元中对迭代器进行洗牌。
代码段
我会将问题保持一般,因为它与整体文档有关,但我特别想知道为什么以下内容不起作用:
tf.set_random_seed(hparams.graph_seed)
...
dataset = dataset.shuffle(hparams.shuffle_buffer_size, hparams.shuffle_seed, reshuffle_each_iteration=True)
基于tf.Dataset.shuffle()
的文档,似乎这应该做我想要的;设置graph seed
和shuffle seed
,从而保持跨运行的确定性,但迭代器重新洗每次迭代。
问题在于它每次初始化时都不会重新洗牌。我注意到这个possible duplicate,但是请注意Tensorflow自己的NMT Tutorial不使用Github问题中建议的种子占位符,并且每次都会得到洗牌结果。也许这是因为他们没有打电话给tf.set_random_seed
?
额外问题
如果tf.set_random_seed
与op-level
种子一起使用时只产生确定性行为,那么它的目的是什么?
此外,seed
中参数tf.Dataset.shuffle()
的用途是什么?它是一个等级种子吗?如何正确使用这些?