如何解决关于张量流数据集的等号并没有真正为变量分配值
使用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,8,5,6]
[1,9,7]
[2,6,8,0,7,3,9]
[2,8,5]
[1、0、2]
因此,问题在于最后两个打印结果应具有相同的元素(当然顺序不相同);但是,正如您所看到的,事实并非如此。
我的猜测是 ds22 并没有真正分配,而是我们定义了如何获取它的操作,因此当我们使用它时,所需的数据可以由数据库自动生成。定义的操作。
或者,有人可以解释吗?
解决方法
考虑此代码
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()))
时,将从该数据集中读取所有剩余数据,并将其作为列表返回。
现在,如果您进行分配,则意味着ds22s
中的对象与ds22
中的对象完全相同。因此,通过编写print(list(ds22s.as_numpy_iterator()))
,您可以再次遍历整个数据集,这次应用了不同的改组。如果禁用reshuffle_each_iteration
,则结果将相同,因为在数据集的第二次迭代中,改组对齐方式完全相同。
我希望这回答了你的问题。随时询问详细信息。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。