gpt4 book ai didi

python - 为什么此 TensorFlow 代码在测试用例中表现不同?

转载 作者:行者123 更新时间:2023-11-28 17:11:15 25 4
gpt4 key购买 nike

我有一个函数(下面的 foo),它在直接运行时和在 tf.test.TestCase 中运行时表现不同。

代码应该创建一个包含 elems [1..5] 的数据集并将其打乱。然后它重复 3 次:从数据创建一个迭代器并使用它来打印 5 个元素。

当它自己运行时,它会给出所有列表都被打乱的输出,例如:

[4, 0, 3, 2, 1]
[0, 2, 1, 3, 4]
[2, 3, 4, 0, 1]

但是当在测试用例中运行时,它们总是相同的,即使在运行之间也是如此:

[0, 4, 2, 3, 1]
[0, 4, 2, 3, 1]
[0, 4, 2, 3, 1]

我想这与测试用例如何处理随机种子有关,但我在 TensorFlow 文档中看不到任何相关信息。感谢您的帮助!


代码:

import tensorflow as tf

def foo():
sess = tf.Session()
dataset = tf.data.Dataset.range(5)
dataset = dataset.shuffle(5, reshuffle_each_iteration=False)

for _ in range(3):
data_iter = dataset.make_one_shot_iterator()
next_item = data_iter.get_next()
with sess.as_default():
data_new = [next_item.eval() for _ in range(5)]
print(data_new)


class DatasetTest(tf.test.TestCase):
def testDataset(self):
foo()

if __name__ == '__main__':
foo()
tf.test.main()

我正在使用 Python 3.6 和 TensorFlow 1.4 运行它。不需要其他模块。

最佳答案

我认为你是对的; tf.test.TestCase 正在 setup使用固定种子。

class TensorFlowTestCase(googletest.TestCase):
# ...
def setUp(self):
self._ClearCachedSession()
random.seed(random_seed.DEFAULT_GRAPH_SEED)
np.random.seed(random_seed.DEFAULT_GRAPH_SEED)
ops.reset_default_graph()
ops.get_default_graph().seed = random_seed.DEFAULT_GRAPH_SEED

DEFAULT_GRAPH_SEED = 87654321 参见 this tensorflow/tensorflow/python/framework/random_seed.py 中的行。

关于python - 为什么此 TensorFlow 代码在测试用例中表现不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47319390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com