cPickle 数据量非常大

cPickle very large amount of data

我有大约 80 万张 256x256 的 RGB 图片,总计超过 7GB。

我想将它们用作卷积神经网络中的训练数据,并想将它们连同它们的标签一起放入 cPickle 文件中。

现在,这占用了很多内存,以至于它需要与我的硬盘内存进行交换,几乎耗尽了它。

这是个坏主意吗?

在不引起太多内存问题的情况下,smarter/more 加载到 CNN 或 pickle CNN 的实用方法是什么?

这就是代码的样子

import numpy as np
import cPickle
from PIL import Image
import sys,os

pixels = []
labels = []
traindata = []
data=[]


for subdir, dirs, files in os.walk('images'):
        curdir=''
        for file in files:
                if file.endswith(".jpg"):
                        floc=str(subdir)+'/'+str(file)
                        im= Image.open(floc)
                        pix=np.array(im.getdata())
                        pixels.append(pix)
                        labels.append(1)
pixels=np.array(pixels)
labels=np.array(labels)
traindata.append(pixels)
traindata.append(labels)
traindata=np.array(traindata)
.....# do the same for validation and test data
.....# put all data and labels into 'data' array
cPickle.dump(data,open('data.pkl','wb'))

Is this is a bad idea?

是的,确实如此。

您正在尝试一次将 7GB 的压缩图像数据加载到内存中(800k 256*256 RGB 文件大约需要 195GB)。这是行不通的。您必须找到一种方法来逐个图像地更新 CNN,并在进行时保存状态。

还要考虑你的 CCN 参数集有多大。 Pickle 不适用于大量数据。如果您需要存储 GB 的神经网络数据,最好使用数据库。如果神经网络参数集只有几 MB,pickle 就可以了。

您可能还想查看 pickle.HIGHEST_PROTOCOL 的文档,这样您就不会受困于旧的和未优化的 pickle 文件格式。