1 回答
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 时,会从该数据集中读取所有剩余数据并将其作为列表返回。现在,如果您进行赋值,则意味着您拥有与 中完全相同的ds22s对象ds22。因此,通过编写,print(list(ds22s.as_numpy_iterator()))您再次对整个数据集进行了重新迭代,这次应用了不同的改组。如果禁用,reshuffle_each_iteration结果将是相同的,因为在数据集的第二次迭代中,洗牌对齐完全相同。
添加回答
举报