我有关于如何训练比 ram 大的神经网络的具体问题。我想使用事实上的标准,它似乎是Keras和tensorflow。
-
我需要使用哪些关键类和方法 从 Numpy,到 scipy,到 pandas,h5py,到 keras,以便不超过我微薄的 8 GB 内存?我有时间训练模型;我没有现金。我的数据集需要 200 GB 的内存。
-
在 keras 中有一个 model_fit() 方法。它需要 X 和 Y numpy 数组。如何让它接受磁盘上的 hdf5 numpy 数组?在指定模型架构本身时 如何保存内存,因为工作内存有时不需要> 8 GB 吗?
-
关于fit_generator,它接受hdf5文件吗?如果 model_fit() 方法可以接受 hdf5,我甚至需要拟合生成器吗?似乎即使使用这些方法,您仍然需要能够在 ram 中安装整个模型?
-
在 keras 中,模型在计算其内存需求时是否包含训练数据?如果是这样,我想我就有麻烦了。
从本质上讲,我假设任何时候我都不能超过我的 8 Gb 内存,无论是从一个热编码到加载模型,再到对一小批样本进行训练。我只是不确定如何具体地做到这一点。
我无法回答所有问题,我也对这些答案非常感兴趣,因为我也面临着8GB的问题。
我只能建议如何一次传递小批量。
问题2:
我不认为 Keras 会支持传递 h5py 文件(但我真的不知道),但你可以创建一个循环来部分加载文件(如果文件已正确保存)。
您可以创建外部循环以:
- 创建一个仅包含文件中一两个样本的小数组
- 使用该方法
train_on_batch
仅传递该小数组。
释放 - 内存,释放阵列或用下一个样本填充同一阵列。
问题3:
也不知道h5py文件,打开文件的对象是python生成器吗?
如果没有,您可以自己创建生成器。
这个想法是使生成器只加载文件的一部分,并生成带有一个或两个数据样本的小批处理数组。(与问题 2 中所做的几乎相同,但循环进入生成器内部。
通常对于非常大的样本集,使用"在线"训练方法。这意味着它不是一次性训练大批量神经网络,而是允许随着获得更多样本而增量更新神经网络。参见:随机梯度下降