gpt4 book ai didi

Python pickle 文件异常大

转载 作者:行者123 更新时间:2023-12-01 05:05:23 28 4
gpt4 key购买 nike

我制作了一个 pickle 文件,存储 100,000 个 80x80 大小的图像中每个像素的灰度值。

(加上一个由 100,000 个值为一位数的整数组成的数组)。

我对 pickle 总大小的近似是,

4 byte x 80 x 80 x 100000 = 2.88 GB 

加上整数数组,它不应该那么大。

但是生成的 pickle 文件超过 16GB,因此仅解开它并加载它就需要几个小时,并且在占用完整的内存资源后它最终会卡住。

是我的计算有问题还是我 pickle 的方式有问题?

我按照以下方式 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)

如果您发现我的计算或代码有问题,请告诉我!

最佳答案

Python Pickles 不是一种用于存储数据的节俭机制,因为您存储的是对象而不是“仅数据”。

以下测试用例在我的系统上需要 24kb,这是针对存储在 pickle 中的小型、稀疏的 numpy 数组:

import os
import sys
import numpy
import pickle

testlabels = numpy.empty(1000)
testlabels[0] = 1
testlabels[99] = 0

test_labels_size = sys.getsizeof(testlabels) #80

output = open('/tmp/pickle', 'wb')
test_labels_pickle = pickle.dump(testlabels, output)

print os.path.getsize('/tmp/pickle')

此外,我不确定为什么您认为 4kb 是 Python 中数字的大小——非 numpy 整数是 24 字节 (sys.getsizeof(1)) 和 numpy 数组至少为 80 字节 (sys.getsizeof(numpy.array([0], float)))。

正如您在回复我的评论时所说的那样,您有理由继续使用 Pickle,因此我不会试图进一步说服您不要存储对象,但要注意存储对象的开销。

作为一个选项:减少训练数据的大小/选择更少的对象。

关于Python pickle 文件异常大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25159270/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com