具体来说,当它比ram大时,如何训练神经网络?

时间:2017-05-12 05:04:09

标签: tensorflow keras hdf5

我有关于如何训练比ram更大的神经网络的具体问题。我想使用似乎是Keras和tensorflow的事实标准。

  1. 我需要使用哪些关键类和方法 从Numpy,到scipy,到pandas,h5py,再到keras,以便不超过我微不足道的8 gb内存?我有时间训练模型;我没有现金。我的数据集需要200 GB的ram。

  2. 在keras中有一个model_fit()方法。它需要X和Y numpy数组。如何让它接受磁盘上的hdf5 numpy数组?在指定模型体系结构时本身如何保存ram,因为工作内存不需要>有时8 gb?

  3. 关于fit_generator,它接受hdf5文件吗?如果model_fit()方法可以接受hdf5,我还需要适合生成器吗?即使使用这些方法,您仍然需要能够在整个模型中使用?

  4. 在keras中,模型在计算内存要求时是否包含训练数据?如果是这样我觉得我有麻烦了。

  5. 本质上,我假设我不会超过我的8 Gb ram,无论是从一个热编码到加载模型,甚至是一小批样本的训练。我只是不确定如何具体完成这一点。

2 个答案:

答案 0 :(得分:0)

我无法回答所有问题,而且我对这些答案也很感兴趣,因为我也面临着8GB的问题。

我只能建议如何一次传递小批量。

问题2:

我不认为Keras会支持传递h5py文件(但我真的不知道),但你可以创建一个load the file partially的循环(如果文件已正确保存)。

您可以创建一个外部循环:

  • 使用文件中的一个或两个样本创建一个小数组
  • 使用仅传递该小数组的方法train_on_batch
  • 释放内存处理数组或使用下一个样本填充此相同数组。

问题3:

还不知道h5py文件,是打开文件python生成器的对象吗?

如果没有,您可以自己创建generator

这个想法是让生成器只加载文件的一部分,并产生带有一个或两个数据样本的小批量数组。 (与问题2中的完全相同,但循环进入生成器。

答案 1 :(得分:0)

通常对于非常大的样本集,使用“在线”训练方法。这意味着,与大批量一次训练您的神经网络不同,它允许神经网络在获得更多样本时逐步更新。请参阅:随机梯度下降