我有一个非常大的图像数据集(> 50G,文件夹中的单个图像)用于训练,以便更有效地加载图像,我首先将部分图像加载到RAM上然后将小批量发送到GPU进行训练。
我希望进一步加快数据准备过程 ,然后 将图像提供给GPU,并考虑进行多处理。但是我不确定我该怎么做,有什么想法吗?
答案 0 :(得分:1)
为了速度,我建议使用HDF5或LMDB:
我已成功使用ml-pyxis创建使用LMDB的深度学习数据集。
它允许创建二进制blob(LMDB),并且可以非常快速地读取它们。 上面的链接提供了一些关于如何创建和读取数据的简单示例。包括python生成器/ iteratos
用于多处理:
我个人使用Keras,并且通过使用python生成器,可以使用fit_generator方法对数据进行多处理。
fit_generator(self, generator, samples_per_epoch,
nb_epoch, verbose=1, callbacks=[],
validation_data=None, nb_val_samples=None,
class_weight={}, max_q_size=10, nb_worker=1,
pickle_safe=False)
使用Python生成器逐批生成的数据使模型适合。为了提高效率,发电机与模型并行运行。例如,这允许您在CPU上并行处理图像上的实时数据增强,以在GPU上训练模型。您可以找到source code here和documentation here。
答案 1 :(得分:0)
不知道你是否更喜欢tensorflow / keras / torch / caffe。
多处理只是Using Multiple GPUs
基本上,您正在尝试通过为每个GPU委派或生成一个子进程来利用更多硬件,让他们发挥他们的魔力。上面的示例适用于 Logistic回归。
当然,你会更热衷于研究Convnets - 这LSU Material(Pgs 48-52 [幻灯片11-14])建立了一些直觉
Keras尚未正式提供支持,但您可以"proceed at your own risk"
对于多处理,张量流是更好的方法(我的意见) 事实上,他们也有一些好的 documentation