如何在每次迭代时对迭代器进行混洗,但在程序运行中是确定性的

时间:2018-02-06 02:05:40

标签: python random tensorflow iterator

问题

我对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 seedshuffle seed,从而保持跨运行的确定性,但迭代器重新洗每次迭代。

问题在于它每次初始化时都不会重新洗牌。我注意到这个possible duplicate,但是请注意Tensorflow自己的NMT Tutorial不使用Github问题中建议的种子占位符,并且每次都会得到洗牌结果。也许这是因为他们没有打电话给tf.set_random_seed

额外问题

如果tf.set_random_seedop-level种子一起使用时只产生确定性行为,那么它的目的是什么?

此外,seed中参数tf.Dataset.shuffle()的用途是什么?它是一个等级种子吗?如何正确使用这些?

0 个答案:

没有答案