如何在每次迭代中洗牌迭代器,但在整个程序运行过程中都是确定的

2024-09-28 21:54:00 发布

您现在位置:Python中文网/ 问答频道 /正文

问题

我被randomness的Tensorflow文档弄糊涂了,因为它与^{}的文档相关。在

具体地说,我正在寻找一种方法来在不同的运行中保持确定性行为,这样每次运行程序时都可以获得相同的结果,但仍然希望在每个新的纪元处重新排列迭代器。在

代码片段

我将把这个问题概括起来,因为它涉及到整个文档,但我特别想知道为什么以下问题不起作用:

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和{},因此在运行期间保持确定性,但是迭代器会重新洗牌每次迭代。在

问题是,它并不是每次初始化时都进行重组。我注意到这个possible duplicate,但是注意到Tensorflow自己的NMT Tutorial并没有像Github问题中建议的那样为种子使用占位符,而且每次都会得到无序的结果。也许这是因为它们没有调用tf.set_random_seed?在

额外问题

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

另外,tf.Dataset.shuffle()中参数seed的用途是什么?是操作级种子吗?这些应该如何正确使用?在


Tags: 方法文档tftensorflowrandom种子datasetgraph