Python 如何在不导入RAM的情况下使用numpy文件?
我想将一个numpy文件(.npy)从Google Drive导入Google Colab,而不将其导入RAM 我正在进行图像分类,并将我的图像数据放入谷歌硬盘中的四个numpy文件中。文件的总大小大于14 GB。而googlecolab只提供12gbram供用户使用。有没有一种方法可以让我一次只将一个批次加载到ram中来训练模型并将其从ram中删除(可能类似于\u目录中的flow\u) 从_目录使用flow_的问题是,即使对于VGG16的一个块,它也非常慢,即使我在Colab目录中有图像 我正在使用Kaggle的猫与狗分类器数据集Python 如何在不导入RAM的情况下使用numpy文件?,python,numpy,google-colaboratory,Python,Numpy,Google Colaboratory,我想将一个numpy文件(.npy)从Google Drive导入Google Colab,而不将其导入RAM 我正在进行图像分类,并将我的图像数据放入谷歌硬盘中的四个numpy文件中。文件的总大小大于14 GB。而googlecolab只提供12gbram供用户使用。有没有一种方法可以让我一次只将一个批次加载到ram中来训练模型并将其从ram中删除(可能类似于\u目录中的flow\u) 从_目录使用flow_的问题是,即使对于VGG16的一个块,它也非常慢,即使我在Colab目录中有图像 我正
! kaggle competitions download -c 'dogs-vs-cats'
我将图像数据转换为numpy数组,并将其保存在4个文件中:
X_列车-浮动32-10.62GB-(189412242243)
X_测试-float32-3.4GB-(60592242243)
Y_列车-64-148KB-(18941)
Y_测试-64-47KB-(6059)
当我运行以下代码时,会话崩溃,显示“您的会话在使用所有可用RAM后崩溃。”错误
import numpy as np
X_train = np.load('Cat_Dog_Classifier/X_train.npy')
Y_train = np.load('Cat_Dog_Classifier/Y_train.npy')
X_test = np.load('Cat_Dog_Classifier/X_test.npy')
Y_test = np.load('Cat_Dog_Classifier/Y_test.npy')
是否有任何方法可以在不将这4个文件加载到RAM的情况下使用它?您可以通过将文件作为内存打开来实现这一点 例如:
import sys
import numpy as np
# Create a npy file
x = np.random.rand(1000, 1000)
np.save('mydata.npy', x)
# Load as a normal array
y = np.load('mydata.npy')
sys.getsizeof(y)
# 8000112
# Load as a memory-mapped array
y = np.load('mydata.npy', mmap_mode='r')
sys.getsizeof(y)
# 136
第二个阵列与普通阵列类似,但由磁盘而不是RAM支持。请注意,这将导致阵列上的操作比正常的RAM备份阵列慢得多;通常,mem映射用于方便地访问阵列的各个部分,而无需将整个阵列加载到RAM中。文件的总大小为14 GB,这确实比您所说的12 GB大。但是,您也使用内存中的数据创建了这些文件,就像您问题的早期版本一样,这表明内存足够容纳所有数据:
save('drive/My Drive/ML/Cats_vs_Dogs_Classifier/X_train.npy', X_train)
save('drive/My Drive/ML/Cats_vs_Dogs_Classifier/Y_train.npy', Y_train)
save('drive/My Drive/ML/Cats_vs_Dogs_Classifier/X_test.npy', X_test)
save('drive/My Drive/ML/Cats_vs_Dogs_Classifier/Y_test.npy', Y_test)
但是,如果在同一个Python会话中再次尝试加载X_列
文件(我假设您使用的是Jupyter笔记本),则在释放前一个X_列
占用的10.6GB内存之前,您将暂时需要另外10.6GB的内存
您可以选择以下策略之一:
- 在加载数据之前启动一个新的Python进程(或内核)
- 继续之前,请显式释放内存:
del X_train, Y_train, X_test, Y_test
- 将生成数据的代码放入函数中。函数返回时,将自动删除函数中创建的所有局部变量
python numpy load部分中有更多的搜索:stackoverflow.com
。如果我的文件夹中有图像,这比使用\u目录中的flow\u快还是慢?我使用X\u train来训练神经网络,因此即使在函数内部运行,我也不会获得10.6GB的可用RAM内存。您的问题表明,您在加载数据时出现了错误。