我发现 Theano/Lasagne 的所有示例都处理像 mnist 和 cifar10 这样的小型数据集,它们可以完全加载到内存中。
我的问题是如何编写有效的代码来训练大规模数据集?具体来说,准备小批量(包括实时数据增强)以保持 GPU 忙碌的最佳方法是什么?
也许喜欢使用 CAFFE 的 ImageDataLayer?例如,我有一个包含所有图像路径和标签的大 txt 文件。显示一些代码将不胜感激。
非常感谢!
我发现 Theano/Lasagne 的所有示例都处理像 mnist 和 cifar10 这样的小型数据集,它们可以完全加载到内存中。
我的问题是如何编写有效的代码来训练大规模数据集?具体来说,准备小批量(包括实时数据增强)以保持 GPU 忙碌的最佳方法是什么?
也许喜欢使用 CAFFE 的 ImageDataLayer?例如,我有一个包含所有图像路径和标签的大 txt 文件。显示一些代码将不胜感激。
非常感谢!
如果数据不适合内存,一个好方法是准备小批量并将它们存储到 HDF5 文件中,然后在训练时使用。
但是,这在进行数据增强时就足够了,因为这是动态完成的。由于 Python 的全局解释器锁,在 GPU 繁忙时,图像无法加载和预处理。据我所知,最好的解决方法是燃料库。Fuel 在不同的 python 进程中加载和预处理小批量,然后通过 TCP 套接字将它们流式传输到训练进程:http: //fuel.readthedocs.org/en/latest/server.html#data-processing-server
它还提供了一些函数来预处理数据,例如缩放和平均减法: http: //fuel.readthedocs.org/en/latest/overview.html#transformers-apply-some-transformation-on-the-fly
希望这可以帮助。迈克尔