我发现Theano / Lasagne的所有例子都涉及像mnist和cifar10这样的小数据集,可以完全加载到内存中。
我的问题是如何编写有效的大规模数据集培训代码? 具体来说,准备小批量(包括实时数据增强)以保持GPU忙碌的最佳方法是什么?
也许喜欢使用CAFFE的ImageDataLayer? 例如,我有一个大的txt文件,其中包含所有图像路径和标签。 很高兴能够展示一些代码。
非常感谢!
答案 0 :(得分:3)
如果数据不适合内存,一个好方法是准备小批量并将它们存储到HDF5文件中,然后在训练时使用。
但是,这在进行数据扩充时就足够了,因为这是动态完成的。由于Pythons全局解释器锁定,在GPU忙时,图像无法加载和预先处理。 我所知道的最好的方法是Fuel库。 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
希望这会有所帮助。 迈克尔