如何管理大型神经网络的数据批次?
Posted
技术标签:
【中文标题】如何管理大型神经网络的数据批次?【英文标题】:How to manage data batches for big neural network? 【发布时间】:2017-03-21 21:59:43 【问题描述】:我正准备在 Keras 中学习包含数百万张小图像(~100x100 像素,每个 3 个通道)的大型神经网络(fc、conv、pool 等)。所有文件都在 ~~800 GB 左右,这是我的问题。我应该如何处理数据?
我知道 Keras 可以批量处理,但是使用 100 个 8 GB 文件或创建 ~~300k 个文件(在每个合并的 32 或 64 个图像中)学习网络更好吗?我认为最好有更大的文件,读取它们 8 次(8 个大文件)比读取 30 万次要快,但我不确定。
我的内存不足 100 GB,所以我肯定无法一次加载全部数据。
谢谢!
【问题讨论】:
【参考方案1】:您可以使用 Keras 提供的keras.preprocessing.image.ImageDataGenerator
,而不是将所有文件加载到内存中。它允许您设置批量大小。如果需要,ImageDataGenerator
还可以帮助您“免费”实时增加数据。由于使用一批图像训练网络需要时间,因此从硬盘读取文件不会降低性能。主要瓶颈是计算能力。
keras.preprocessing.image.ImageDataGenerator
的接口和例子可以在ImageDataGenerator找到
【讨论】:
【参考方案2】:如果由于某种原因你不能使用keras.preprocessing.image.ImageDataGenerator
,你可以使用你自己的生成器。
就我而言,我进行了分段,但他们的 flow_from_directory
方法不支持这一点。所以我根据https://wiki.python.org/moin/Generators 编写了自己的生成器,它可以无限生成图像。您可以将它们与model.fit_generator
方法一起使用:https://keras.io/models/model/#fit_generator。
【讨论】:
以上是关于如何管理大型神经网络的数据批次?的主要内容,如果未能解决你的问题,请参考以下文章
SAP MM中采用批次号管理是啥?管理的物料采购这块还是仓管这块?若设置为采用批次号管理,如何在后台配