Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在不导入RAM的情况下使用numpy文件?_Python_Numpy_Google Colaboratory - Fatal编程技术网

Python 如何在不导入RAM的情况下使用numpy文件?

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目录中有图像 我正

我想将一个numpy文件(.npy)从Google Drive导入Google Colab,而不将其导入RAM

我正在进行图像分类,并将我的图像数据放入谷歌硬盘中的四个numpy文件中。文件的总大小大于14 GB。而googlecolab只提供12gbram供用户使用。有没有一种方法可以让我一次只将一个批次加载到ram中来训练模型并将其从ram中删除(可能类似于\u目录中的flow\u)

从_目录使用flow_的问题是,即使对于VGG16的一个块,它也非常慢,即使我在Colab目录中有图像

我正在使用Kaggle的猫与狗分类器数据集

! 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
    
  • 将生成数据的代码放入函数中。函数返回时,将自动删除函数中创建的所有局部变量

您对哪个零件有?MCVE吗。问题是RAM内存过载。请检查,我添加了一些相关内容:…-在.npy站点的
python numpy load部分中有更多的搜索:stackoverflow.com
。如果我的文件夹中有图像,这比使用\u目录中的flow\u快还是慢?我使用X\u train来训练神经网络,因此即使在函数内部运行,我也不会获得10.6GB的可用RAM内存。您的问题表明,您在加载数据时出现了错误。