我制作了一个pickle文件,存储了100,000张大小为80x80的图像中每个像素的灰度值。
(另外还有一个包含100,000个整数的数组,其值为一位数字。)
我对pickle文件的总大小进行了估计,大约是:
4 byte x 80 x 80 x 100000 = 2.88 GB
再加上整数数组,这个数组不应该很大。
生成的pickle文件大小超过16GB,因此解压和加载它需要几个小时,最终会在占用全部内存资源后冻结。
我的计算有问题还是我打包的方式有问题?
我是按照以下方式打包的文件。
from PIL import Image
import pickle
import os
import numpy
import time
trainpixels = numpy.empty([80000,6400])
trainlabels = numpy.empty(80000)
validpixels = numpy.empty([10000,6400])
validlabels = numpy.empty(10000)
testpixels = numpy.empty([10408,6400])
testlabels = numpy.empty(10408)
i=0
tr=0
va=0
te=0
for (root, dirs, filenames) in os.walk(indir1):
print 'hello'
for f in filenames:
try:
im = Image.open(os.path.join(root,f))
Imv=im.load()
x,y=im.size
pixelv = numpy.empty(6400)
ind=0
for ii in range(x):
for j in range(y):
temp=float(Imv[j,ii])
temp=float(temp/255.0)
pixelv[ind]=temp
ind+=1
if i<40000:
trainpixels[tr]=pixelv
tr+=1
elif i<45000:
validpixels[va]=pixelv
va+=1
else:
testpixels[te]=pixelv
te+=1
print str(i)+'\t'+str(f)
i+=1
except IOError:
continue
trainimage=(trainpixels,trainlabels)
validimage=(validpixels,validlabels)
testimage=(testpixels,testlabels)
output=open('data.pkl','wb')
pickle.dump(trainimage,output)
pickle.dump(validimage,output)
pickle.dump(testimage,output)
如果您发现我的计算或代码有任何错误,请告诉我!