如何管理大型神经网络的数据批量?

时间:2016-11-08 10:10:45

标签: python image deep-learning keras

我正准备在Keras学习数百万个小图像(~~100x100像素,每个3个频道)的相当大的神经网络(fc,conv,pool等)。所有文件都在~~ 800 GB左右,这是我的问题。我该如何准备数据?

我知道Keras处理批处理但是用100个文件每个8 GB学习网络或创建~~ 300k文件(每个合并的32或64个图像)更好?我认为拥有更大的文件会更好,读取它们的速度要快8倍(8个大文件),而不是300k次,但我不确定。

我的RAM不到100 GB,所以我无法一次加载整个数据。

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用Keras提供的keras.preprocessing.image.ImageDataGenerator,而不是将所有文件加载到内存中。它允许您设置批量大小。如果您需要,ImageDataGenerator还可以“免费”实时增强您的数据。由于使用一批图像训练网络需要时间,因此从硬盘驱动器读取文件不会降低性能。主要瓶颈是计算能力。

可以在ImageDataGenerator

找到keras.preprocessing.image.ImageDataGenerator的界面和示例

答案 1 :(得分:0)

如果由于某种原因您无法使用keras.preprocessing.image.ImageDataGenerator,则可以使用自己的生成器。

在我的情况下,我进行了细分,但flow_from_directory方法不支持。所以我根据https://wiki.python.org/moin/Generators编写了自己的生成器,它无限期地生成了图像。您可以使用model.fit_generator方法使用它们:https://keras.io/models/model/#fit_generator