gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 09:37:32 29 4
gpt4 key购买 nike

我想将一个 numpy 文件 (.npy) 从 Google Drive 使用到 Google Colab 而不将其导入 RAM。
我正在研究图像分类,并将我的图像数据放入 Google Drive 中的四个 numpy 文件中。文件的总大小大于 14 GB。而 Google Colab 仅提供 12 GB RAM 供使用。有没有一种方法可以通过一次仅将单个批次加载到 ram 中来训练模型并将其从 ram 中删除(可能类似于 flow_from_directory)来使用它?
使用 flow_from_directory 的问题是,即使我在 Colab 目录中有图像,即使对于一个 VGG16 块,它也很慢。
我正在使用 Kaggle 的 Cats vs Dogs 分类器数据集。

! kaggle competitions download -c 'dogs-vs-cats'
我将图像数据转换为 numpy 数组,并将其保存在 4 个文件中:
X_train - float32 - 10.62GB - (18941, 224, 224, 3)
X_test - float32 - 3.4GB - (6059, 224, 224, 3)
Y_train - float64 - 148KB - (18941)
Y_test - float64 - 47KB - (6059)
当我运行以下代码时, session 崩溃,显示“您的 session 在使用所有可用 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')
有没有办法在不将其加载到 RAM 中的情况下使用这 4 个文件?

最佳答案

您可以通过将文件打开为 memory-mapped array 来完成此操作。 .
例如:

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 支持的阵列慢得多;通常使用内存映射来方便地访问数组的各个部分,而无需将整个数组加载到 RAM 中。

关于python - 如何在不导入 RAM 的情况下使用 numpy 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62498821/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com