1 回答

TA貢獻1880條經(jīng)驗 獲得超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()))
結(jié)果是一樣的。背后的原因是,當你寫的時候,ds22=dataset2.skip(7)你的意思是取前 7 個樣本,丟棄它們,然后再取一個并顯示它。因此,當您編寫print(list(ds22.as_numpy_iterator()))This 時,會從該數(shù)據(jù)集中讀取所有剩余數(shù)據(jù)并將其作為列表返回?,F(xiàn)在,如果您進行賦值,則意味著您擁有與 中完全相同的ds22s對象ds22。因此,通過編寫,print(list(ds22s.as_numpy_iterator()))您再次對整個數(shù)據(jù)集進行了重新迭代,這次應(yīng)用了不同的改組。如果禁用,reshuffle_each_iteration結(jié)果將是相同的,因為在數(shù)據(jù)集的第二次迭代中,洗牌對齊完全相同。
添加回答
舉報