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 文件格式。
我有大约 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 文件格式。