在数组中导入数据集时,谷歌 colab 中的 ram 用完了
Posted
技术标签:
【中文标题】在数组中导入数据集时,谷歌 colab 中的 ram 用完了【英文标题】:running out of ram in google colab while importing dataset in array 【发布时间】:2021-07-30 09:58:25 【问题描述】:我想在一个数组中存储大约 2400 张大小为 2000**2000*3 的图像,以供卷积神经网络使用。但是,由于内存不足,Google Colab 会话不断崩溃。
我的导入图像数据集的代码:
Train_data = []
for img in sorted(glob.glob("path/*.jpg")):
image= mpimg.imread(img)
image=np.array(image , dtype='float32')
image /= 255.
Train_data.append(image)
Train_data = np.array(Train_data)
【问题讨论】:
尝试使用生成器。 【参考方案1】:非常感谢您的出色回答。我尝试生成器,没关系。但是,当我尝试下面的代码时,我不会面临崩溃:
Train_data =np.empty(shape=(num,m,n,c), dtype=np.float32)
i=0
for img in sorted(glob.glob("path/*.jpg")):
image= mpimg.imread(img)
image=np.array(image , dtype='float32')
image /= 255.
Train_data[i,:,:,:] = image
i+=1
谁能比较这段代码和我第一个使用 append 的代码的空间复杂度?
【讨论】:
【参考方案2】:有两种方法可以避免 RAM 错误:
第一个选项:将图像调整为较小的尺寸
import cv2
Train_data = []
for img in sorted(glob.glob("path/*.jpg")):
image= mpimg.imread(img)
image=np.array(image , dtype='float32')
image = cv2.resize(image, (150,150))
image /= 255.
Train_data.append(image)
Train_data = np.array(Train_data)
第二个选项:您可以使用比迭代器消耗更少内存的生成器,因为它不存储整个列表。
Train_data = []
def gen_images():
for img in sorted(glob.glob("path/*.jpg")):
image= mpimg.imread(img)
image=np.array(image , dtype='float32')
image /= 255.
yield image
for image in gen_images():
Train_data.append(image)
【讨论】:
以上是关于在数组中导入数据集时,谷歌 colab 中的 ram 用完了的主要内容,如果未能解决你的问题,请参考以下文章
在 VM 引擎中导入 google.colab 不会让我在 Google Colab 中运行 Jupyter Notebook?
为啥我无法在 Google Colab 中导入 python-rosbag?