我准备在Keras中学习相当大的神经网络(fc, conv, pool等),有数百万张小图像(~~100x100 px,每个3通道)。所有的文件将在~~ 800gb左右,这是我的问题。我应该如何准备资料?
我知道Keras处理批处理,但它是更好地学习网络与100个文件8 GB或创建~~300k文件(在每个合并32或64图像)?我认为拥有更大的文件更好,并且读取8次(8个大文件)比读取30万次要快,但我不确定。
我有不到100gb的内存,所以我不能一次加载所有的数据。
谢谢!
您可以使用Keras提供的keras.preprocessing.image.ImageDataGenerator
,而不是将所有文件加载到内存中。它允许您设置批处理大小。如果需要,ImageDataGenerator
还可以帮助您实时"免费"地增加数据。由于使用一批图像来训练网络需要时间,因此从硬盘驱动器读取文件不会降低性能。主要的瓶颈是计算能力。
keras.preprocessing.image.ImageDataGenerator
的接口和示例可以在ImageDataGenerator
如果由于某种原因您不能使用keras.preprocessing.image.ImageDataGenerator
,您可以使用您自己的生成器。
在我的情况下,我做了分割,这是不支持他们的flow_from_directory
方法。所以我根据https://wiki.python.org/moin/Generators编写了自己的生成器,它可以无限地生成图像。可以通过model.fit_generator
方法使用它们:https://keras.io/models/model/#fit_generator。