我想读取大量的图像进行深度学习,但当内存不足时该如何解决?
问题描述:
在用python编写的深度学习程序中,我想要一次性在numpy数组中存储大量图像数据,并从该数组中随机提取批量数据,但图像数据太大,内存耗尽。 我们应该如何处理这种情况?每次检索批处理数据时,我别无选择,只能进行IO处理并从存储中读取图像数据?我想读取大量的图像进行深度学习,但当内存不足时该如何解决?
答
文件I/O可以解决这个问题,但会减慢Leanring进程,因为FILE I/O是一项需要很长时间的任务。
但是,您可以尝试使用多线程(例如,
https://github.com/stratospark/keras-multiprocess-image-data-generator
(我不知道你用的是什么样的架构)。
好歹回到基本思想:
挑选一些随机的文件以及阅读它们,开始训练。在训练期间开始第二个线程,它将再次读取随机文件。因此,您的学习线程无需等待新数据,因为培训过程可能比读取过程花费更长的时间。
一些框架有这个功能已经实现,退房:
https://github.com/fchollet/keras/issues/1627
或:
https://github.com/pytorch/examples/blob/master/mnist_hogwild/train.py
当内存即将用完时,操作系统会自动开始将数据移动到HDD。这是最糟糕的情况,尤其是您的硬盘缓慢,每个应用程序都会变慢。这也消耗CPU资源。所以至少你必须控制数据量不要达到最大内存大小。 –