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

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中采用批次号管理是啥?管理的物料采购这块还是仓管这块?若设置为采用批次号管理,如何在后台配

大型局域网一步到位的网络管理方案

PXE批量装系统之GHO恢复模式针对同型号同批次机器网络装机

用SNMP实现对大型网络的轻松管理!

如何建立高可靠性的企业网络

用SNMP对大型网络管理-cacti