当前位置: 首页 > 面试题库 >

cPickle大量数据

刘才俊
2023-03-14
问题内容

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

我想将它们用作卷积神经网络中的训练数据,并希望将它们及其标签放入cPickle文件中。

现在,这需要占用大量内存,以至于需要与我的硬盘驱动器交换内存,并几乎消耗掉所有内存。

这是一个坏主意吗?

在不引起过多内存问题的情况下,将哪种方法更聪明/更实用地加载到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'))

问题答案:

这是一个坏主意吗?

确实是的。

您试图一次将7GB的压缩图像数据全部加载到内存中(对于800k 256 * 256 RGB文件,大约为195
GB)。这是行不通的。您必须找到一种可以逐张更新CNN的方法,并且可以随时保存状态。

还请考虑您的CCN参数集的大小。泡菜不是为大量数据而设计的。如果您需要存储GB的神经网络数据,那么使用数据库会更好。但是,如果神经网络参数集只有几个MB,则泡菜会很好。

您可能还想看一下的文档pickle.HIGHEST_PROTOCOL,因此您不会受制于旧的未优化的pickle文件格式。



 类似资料:
  • 问题内容: 我正在运行的代码将创建包含多个用户定义类的大对象,然后必须对其进行序列化以供以后使用。据我所知,只有酸洗才能满足我的需求。我一直在使用cPickle来存储它们,但是它生成的对象大约是40G,来自运行在500 mb内存中的代码。序列化的速度不是问题,但是对象的大小是问题。我可以使用任何技巧或替代方法来使泡菜变小吗? 问题答案: 如果您必须使用pickle并且没有其他序列化方法对您有用,那

  • 模块:pickle 和 cPickle 目的: Python对象序列化 python版本:pickle至少1.4, cPickle 至少1.5 Python对象序列化 描述 pickle模块可以实现任意的Python对象转换为一系列字节(即序列化对象)的算法. 这些字节流可以被传输或存储, 接着也可以重构为一个和原先对象具有相同特征的新对象. cPickle模块实现了同样的算法, 但它是用c而不是

  • 问题内容: 我必须腌制这样的对象数组: 它给出了以下错误: 有办法解决吗? 问题答案: 内置的pickle模块无法序列化几种python对象(包括lambda函数,嵌套函数和在命令行中定义的函数)。 picloud软件包包括一个更强大的pickler,可以对lambda函数进行pickle。 可以使用常规的pickle / cPickle和功能来反序列化PiCloud序列化的对象。 莳萝还提供类似

  • 问题内容: 背景:我正在使用最小构造算法构建一个Trie以表示字典。输入列表是430万个utf-8字符串,按字典顺序排序。生成的图是非循环的,最大深度为638个节点。我的脚本的第一行通过将递归限制设置为1100 。 问题:我希望能够将Trie序列化到磁盘上,因此我可以将其加载到内存中,而不必从头开始重建(大约22分钟)。我已经尝试了和,同时使用了文本和二进制协议。每次,我都会得到如下所示的堆栈跟踪

  • 问题内容: 我只是尝试使用sklearn.decomposition中的IncrementalPCA,但它像以前的PCA和RandomizedPCA一样引发了MemoryError。我的问题是,我要加载的矩阵太大,无法放入RAM。现在,它以形状〜(1000000,1000)的数据集形式存储在hdf5数据库中,因此我有1.000.000.000 float32值。我以为IncrementalPCA可

  • 本文向大家介绍mysql批量删除大量数据,包括了mysql批量删除大量数据的使用技巧和注意事项,需要的朋友参考一下 mysql批量删除大量数据 假设有一个表(syslogs)有1000万条记录,需要在业务不停止的情况下删除其中statusid=1的所有记录,差不多有600万条, 直接执行 DELETE FROM syslogs WHERE statusid=1 会发现删除失败,因为lock wai

  • 问题内容: 这可能很愚蠢,但我无法使用python 3.5 docker image 安装 Docker文件 requirements.txt 当我尝试构建图像时 问题答案: 带有标准库…在python 2.x中。您使用的是python 3.x,因此,如果需要,您可以执行以下操作: 但是,在3.x中,仅使用会更容易。 无需安装任何东西。如果python 3.x 需要某些东西,那可能是一个错误。

  • 我创建了一个向MySql数据库插入数百万个值的程序。我读到过有关批插入的文章,它将优化我的程序并使其更快,但当我尝试这样做时,它以同样的方式工作。我没有将每个值插入数据库,而是每次将500个值保存在一个列表中,然后将它们插入一个大循环中,如下所示: 然后我删除列表中的所有值,并再次开始收集500个值。它不应该工作得更好吗? 我的插入代码是: 我有一些问题: 1。为什么当我批量插入时它不能更快地工作