亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

等號,關于張量流數據集,并沒有真正為變量賦值

等號,關于張量流數據集,并沒有真正為變量賦值

慕的地6264312 2023-06-13 19:13:36
在使用 tensorflow 數據集的操作時,我發現了一些有趣的東西。讓我先給你看代碼:import tensorflow as tfdataset = tf.data.Dataset.range(10)dataset1=dataset.shuffle(10, reshuffle_each_iteration=False) dataset2=dataset.shuffle(10, reshuffle_each_iteration=True)ds11=dataset1.take(7)ds12=dataset1.skip(7)ds21=dataset2.take(7)ds22=dataset2.skip(7)ds22s=ds22.shuffle(7)print(list(dataset2.as_numpy_iterator()))print(list(ds11.as_numpy_iterator()))print(list(ds12.as_numpy_iterator()))print(list(ds21.as_numpy_iterator()))print(list(ds22.as_numpy_iterator()))print(list(ds22s.as_numpy_iterator()))輸出:[3, 0, 7, 9, 8, 5, 4, 1, 6, 2][2, 0, 4, 8, 5, 3, 6][1, 9, 7][2, 6, 8, 0, 7, 3, 9][2, 8, 5][1, 0, 2]所以,問題是最后兩個打印結果應該有相同的元素(當然不是相同的順序);但是,如您所見,事實并非如此。我的猜測是ds22并沒有真正賦值,而是我們定義了一個如何獲取它的操作,所以我們在使用它的時候,可以通過定義的操作自動生成我們需要的數據。或者,誰能解釋一下?
查看完整描述

1 回答

?
慕村225694

TA貢獻1880條經驗 獲得超4個贊

考慮這段代碼


import tensorflow as tf

dataset = tf.data.Dataset.range(10)

dataset1=dataset.shuffle(10, reshuffle_each_iteration=False)?

dataset2=dataset.shuffle(10, reshuffle_each_iteration=True)


ds11=dataset1.take(7)

ds12=dataset1.skip(7)

ds21=dataset2.take(7)


ds22=dataset2.skip(7)

ds22s=ds22 #.shuffle(7)

print(list(dataset2.as_numpy_iterator()))

print(list(ds11.as_numpy_iterator()))

print(list(ds12.as_numpy_iterator()))

print(list(ds21.as_numpy_iterator()))

print(list(ds22.as_numpy_iterator()))

print(list(ds22s.as_numpy_iterator()))

結果是一樣的。背后的原因是,當你寫的時候,ds22=dataset2.skip(7)你的意思是取前 7 個樣本,丟棄它們,然后再取一個并顯示它。因此,當您編寫print(list(ds22.as_numpy_iterator()))This 時,會從該數據集中讀取所有剩余數據并將其作為列表返回?,F在,如果您進行賦值,則意味著您擁有與 中完全相同的ds22s對象ds22。因此,通過編寫,print(list(ds22s.as_numpy_iterator()))您再次對整個數據集進行了重新迭代,這次應用了不同的改組。如果禁用,reshuffle_each_iteration結果將是相同的,因為在數據集的第二次迭代中,洗牌對齊完全相同。


查看完整回答
反對 回復 2023-06-13
  • 1 回答
  • 0 關注
  • 127 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號