[英]Why does the plotting function plt.show() behave differently when inside or outside a loop?
[英]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 = 87654321
在tensorflow/tensorflow/python/framework/random_seed.py
查看此行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.