python - 等号,关于 tensorflow 数据集,并没有真正为变量赋值
问题描述
在使用 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并不是真正赋值的,而是我们定义了如何获取它的操作,所以当我们使用它时,我们需要的数据可以通过定义的操作自动生成。
或者,谁能解释一下?
解决方案
考虑这段代码
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
结果将是相同的,因为在数据集的第二次迭代中,改组对齐方式完全相同。我希望这回答了你的问题。随时询问详情。
推荐阅读
- c# - 系统内存不足异常 - OpenXML
- datetime - 仅限 ISO 8601 日期部分
- caching - 使用 IIS 时如何解决客户端浏览器缓存问题?
- .net - Git 在具有多个项目的解决方案中检测更改的 .csproj
- yii2 - Yii2 - 一种形式的两个模型 - 值不保存在第二个模型中
- python - TemplateDoesNotExist 在特定位置
- google-apps-script - 如何使用谷歌应用脚本在饼图中设置颜色
- azure - 将平面文件导入 Azure DevOps 源代码控制
- python - 我可以使用 Tkinter 文件对话框保存 Pandas DataFrame 吗?
- javascript - 突出显示 HTML 页面中的重复单词