【发布时间】:2020-08-22 12:22:49
【问题描述】:
我在使用 tensorflow 数据集的操作时发现了一些有趣的东西。我先给你看代码:
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()))
输出:
[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并不是真正赋值的,而是我们定义了如何获取它的操作,所以当我们使用它时,我们需要的数据可以由定义的操作。
或者,谁能解释一下?
【问题讨论】:
标签: python tensorflow shuffle tensorflow-datasets