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