我想在一个数组中存储大约 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)
答案 0 :(得分: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)
答案 1 :(得分:0)
非常感谢您的精彩回答。我试试发电机,没问题。但是,当我尝试下面的代码时,我不会遇到崩溃:
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 的第一个代码进行比较?