簡體   English   中英

為什么這個TensorFlow代碼在測試用例中表現不同?

[英]Why does this TensorFlow code behave differently when inside a test case?

我有一個函數( 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正在設置為使用固定種子。

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 = 87654321tensorflow/tensorflow/python/framework/random_seed.py查看行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM