【发布时间】:2021-02-28 17:15:56
【问题描述】:
我有几个关于tensorflow Datasets的问题。
我在 jupyter notebook 中创建了一个 tensorflow 数据集对象,一个包含 370 万个样本的训练数据集和一个包含近 100 万个样本的测试集。 每个样本都是一个包含 1000 个值的时间序列。
对于我所做的训练集和测试集
dataset = dataset.cache()
dataset = dataset.shuffle(len(dataset))
dataset = dataset.batch(batch_size)
dataset = dataset.prefetch(tf.data.experimental.AUTOTUNE)
笔记本的这些单元格的创建非常出色。 但是在下一个单元格中,当我想枚举测试数据集时,我的 jupyter 内核连接中断(也描述了here。调试输出揭示了这个问题:
tensorflow/core/framework/cpu_allocator_impl.cc:80] Allocation of 18936000000 exceeds 10% of free system memory.
这个问题也是described here。 我已经将 batch_size 降到了 1,我启用了
physical_devices = tf.config.list_physical_devices('GPU')
tf.config.experimental.set_memory_growth(physical_devices[0], True)
但我仍然有这个问题。我的机器有 64GB 的 RAM 和 6GB 的 GPU 内存。
我的问题是:
- tensorflow 数据集可以容纳的样本数量是否有限制?
- 我可以进一步减少时间序列长度,但如果有这样的限制,这是否会有帮助?
- 是否有任何聪明的想法/方法(或其他更有效的数据结构)不会遇到此内存错误?
- 这是超出的 GPU 内存还是 RAM 内存?
抱歉问了这么多问题,我正在学习,感谢任何事情。
【问题讨论】:
-
我在使用基于时间序列的大型数据集时遇到了完全相同的问题。事实上,我的调试器根本没有输出任何错误信息,它只是表明 jupyter 内核崩溃了。我将代码导出到一个常规的 py 文件并执行了脚本,但是 python 只是退出而没有任何警告或错误消息。我将批量大小减少到 1,但这也无济于事。 Gpu 工作负载“Cuda”暂时达到峰值,然后代码退出,没有任何错误消息。
标签: python tensorflow jupyter-notebook tensorflow-datasets