我使用以下内容制作了一个pickle文件。
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)
现在我使用以下代码的load_data()函数进行unpickling: http://www.deeplearning.net/tutorial/code/logistic_sgd.py 通过运行调用 http://www.deeplearning.net/tutorial/code/rbm.py
但它返回以下错误。
cPickle.UnpicklingError: A load persistent id instruction was encountered,
but no persistent_load function was specified.
似乎数据结构无与伦比,但我可以&#39;弄清楚应该如何......
作为参考,pickle文件的大小超过16GB,其gzip超过1GB
答案 0 :(得分:1)
我发现酸洗和去皮很聪明。
在这里你不会像泡菜一样捣蛋,所以它无法奏效。在你的代码中,你在同一个文件中一个接一个地pickle对象。你腌三次到同一个文件。
如果你想要阅读它们,你必须进行顺序阅读。
你要做的就是打开文件进行unpickling,然后按顺序pickle.load
每个对象。
with gzip.open(dataset, 'rb') as f:
train_set = cPickle.load(f)
valid_set = cPickle.load(f)
test_set = cPickle.load(f)
你可能想尝试一个更简单的代码,其中train_set, valid_set, test_set
(用gzip进行酸洗和去除)是简单的可选对象,只是为了确定。