问题类型
文档说明请求
你是否在TF nightly版本中复现了这个bug?
否
来源
二进制文件
Tensorflow版本
2.11.0
自定义代码
无
OS平台和发行版
Linux Ubuntu 20.04
移动设备
- 无响应*
Python版本
3.9.7
Bazel版本
- 无响应*
GCC/编译器版本
9.4.9
CUDA/cuDNN版本
- 无响应*
GPU型号和内存大小
NVIDIA RTX A4000 15.74GiB
当前行为?
如果我有一个很长的列表,我希望将它们连接起来,那么连接它们的方式很重要,是重左还是重右。我希望在文档中看到这一点,这样其他人就不必自己学习了。(另外,一个静态的tf.Dataset.concatenate_from_list函数,对于用户来说能够正确地执行操作,那就太好了。)具体来说,对于我的大量数据集列表,其中包含大量的图像数据,这些数据是通过py_functions从磁盘读取的,进行了批处理和预取,以下代码片段给出了不同的性能表现。concatenate_by_appending
导致进程被杀死,可能是由于内存不足的条件。相比之下,concatenate_by_prepending
和 concatenate_by_splitting
运行良好。我怀疑如果我使用了一种更激进的 shuffle
形式,那么只有 concatenate_by_splitting
能够正常工作。
我应该澄清的是,不是创建 concatenate_by_appending
数据集导致进程被杀死。当我尝试使用组合数据集进行 predict
时,进程才会被杀死。对于每个连接操作,前置方法是重左的,最左边的数据集可以立即找到,因为最顶层连接的最左边分支。相反,追加方法对于每个连接操作都是重左的,需要通过所有连接来查找最左边的数据集,并导致进程被杀死,可能是由于资源耗尽,特别是内存不足的情况。至少我认为是这样发生的。
5条答案
按热度按时间ylamdve61#
@Leengit
您能否详细说明一下您的功能,并请指定此功能的使用场景?
谢谢!
vltsax252#
我希望
tensorflow.Dataset.concatenate
的文档页面提到,如果要通过多次使用这个两个数据集concatenate
方法来连接多个数据集,那么最安全的方法是用分治法实现,或者至少文档应该表明,逐个附加数据集的简单方法可能会有问题。另外,我们可以扩展
tensorflow.Dataset
接口,使得concatenate
方法的参数可以是一个数据集列表(或元组等),然后实现将它们用分治法(上面)连接起来(或者使用一个新的tensorflow
数据结构)。在我的情况下,我有一个函数,它读取一个非常大的全息片(医学)图像的一部分。由于这些块需要不同的参数来读取、遮罩、颜色归一化、转换等,所以对我来说,从每个中创建一个单独的
tensorflow.Dataset
是很方便的。然后我需要将所有这些tensorflow.Dataset
对象连接在一起。lmyy7pcs3#
我认为在https://www.tensorflow.org/guide/data中提及最佳实践以使用数据是更好的地方。在API文档中,我们主要提及其用法和行为。
nx7onnlm4#
感谢提出这个问题 @Leengit。我同意应该更新文档,以警告关于将大量数据集连接在一起的性能问题,并建议一个替代方案。
值得注意的是,连接大量数据集的最佳方法是使用
flat_map
:sycxhyv75#
我不知道可以给
List[tf.data.Dataset]
赋值为tf.data.Dataset.from_tensor_slices
!请将此方法记录在某处,以便那些想使用成对的concatenate
的人能看到它。