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



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

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

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

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

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

从本质上讲,我假设任何时候我都不能超过我的 8 Gb 内存,无论是从一个热编码到加载模型,再到对一小批样本进行训练。我只是不确定如何具体地做到这一点。

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

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

问题2:

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

您可以创建外部循环以:

  • 创建一个仅包含文件中一两个样本的小数组
  • 使用该方法train_on_batch仅传递该小数组。
  • 释放
  • 内存,释放阵列或用下一个样本填充同一阵列。

问题3:

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

如果没有,您可以自己创建生成器。

这个想法是使生成器只加载文件的一部分,并生成带有一个或两个数据样本的小批处理数组。(与问题 2 中所做的几乎相同,但循环进入生成器内部。

通常对于非常大的样本集,使用"在线"训练方法。这意味着它不是一次性训练大批量神经网络,而是允许随着获得更多样本而增量更新神经网络。参见:随机梯度下降

最新更新