我试图创建一个函数,将14,000张图像的大型数据集加载到变量中,但遇到了内存(RAM)问题。
我尝试创建类似于cifar100.load_data
的函数,但没有成功。
我定义的函数如下所示:
def load_data(): trn_x_names=os.listdir('data/train_x') trn_y_names=os.listdir('data/train_y') trn_x_list=[] trn_y_list=[] for image in trn_x_names[0:]: img=cv2.imread('data/train_x/%s'%image) img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB) trn_x_list.append(img) for image in trn_y_names[0:]: img=cv2.imread('data/train_y/%s'%image) img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB) trn_y_list.append(img) x_train= np.array(trn_x_list) y_train= np.array(trn_y_list) return x_train,y_train
我首先逐个加载所有图像,将它们添加到相应的列表中,最后将这些列表转换为numpy
数组,并将它们赋值给一些变量并返回。但在过程中,由于消耗了100%的RAM,我遇到了RAM问题。
回答:
你需要分批读取你的图像,而不是将整个数据集加载到内存中。如果你使用的是tensorflow,可以使用ImageDataGenerator.flowfromdirectory。文档在这里。如果你的数据没有组织在子目录中,那么你需要创建一个python生成器来分批读取数据。你可以在这里看到如何构建这样的生成器。将批次大小设置为一个不会填满你内存的值,例如30。