美文网首页
HDF5存储大于4GB的文件,OverflowError: ca

HDF5存储大于4GB的文件,OverflowError: ca

作者: 木木爱吃糖醋鱼 | 来源:发表于2018-06-15 02:31 被阅读0次

前两天用h5py做图像训练的时候遇到了一个问题,在用HDF5存储大文件的时候报错:

OverflowError: cannot serialize a bytes object larger than 4 GiB

当时有大概35G的图像要存入h5文件,而代码又是网上借鉴的,没有弄清楚h5文件存储的具体方法。为了图快,就强行把文件减小到3.5G来训练。训练的时候研究一下是怎么回事,毕竟h5这种不可能只能存4G大小的文件的。

后来弄明白了。HDF5是可以用chunk来存储的,而每一个chunk的大小不能超过4G,数据总量大小好像是不限(具体没试过)。

HDF5可以把平铺的数据分割成chunk储存,这些chunks用一个serial file来索引。至于怎么分割chunk全在码农自己。比如下面的代码是我之前有问题的代码:

parser = argparse.ArgumentParser(description='')

... ...

parser.add_argument('--image_size', dest='image_size', default=512)

parser.add_argument('--data_size', dest='data_size', default=173356)

... ...

h5file = h5py.File(args.save_file, 'w')

train_img_h5 = h5file.create_dataset(shape=(args.data_size, args.image_size, args.image_size),

                                        maxshape=(None, args.image_size, args.image_size),

                                        dtype=np.float32, name='train_image', compression='gzip',

                                        chunks=(args.data_size, args.image_size, args.image_size)

                                        )

上面的问题就出在args.data_size上。在create_dataset()中,shape确定了文件的总大小和dimension,chunks是一块数据有多大。如果是512 x 512 x 173356一块那肯定报错啊。

所以我改成了下面这样:

parser = argparse.ArgumentParser(description='')

... ...

parser.add_argument('--image_size', dest='image_size', default=512)

parser.add_argument('--data_size', dest='data_size', default=173356)

parser.add_argument('--chunk_size', dest='chunk_size', default=2048)

... ...

h5file = h5py.File(args.save_file, 'w')

train_img_h5 = h5file.create_dataset(shape=(args.data_size, args.image_size, args.image_size),

                                        maxshape=(None, args.image_size, args.image_size),

                                        dtype=np.float32, name='train_image', compression='gzip',

                                        chunks=(args.chunk_size, args.image_size, args.image_size)

                                        )

512 x 512 x 2048是没有4g的。这样改过来17万张图片就都可以存下了。

ref:https://support.hdfgroup.org/HDF5/doc/H5.intro.html

相关文章

  • HDF5存储大于4GB的文件,OverflowError: ca

    前两天用h5py做图像训练的时候遇到了一个问题,在用HDF5存储大文件的时候报错: OverflowError: ...

  • HDF(1): 简单介绍

    HDF5 HDF5是文件型数据库,适合存储大批量同类型数据,读写速度快,占用空间小。HDF5 API只负责操作和组...

  • HDF5数据格式读写

    1 hdf5格式使用方法 1.1 hdf5文件介绍 一个HDF5文件是一种存放两类对象的容器:dataset和gr...

  • MongoDb in .Net

    1,MongoDb解决的问题 大数据的增删改查 --限制:a,32为系统寻址4GB,存储上限仅4GB ...

  • hdf5存储

    pandas区别于numpy,主要数据结构是DataFrame,是具有行列索引的二维数组,而numpy单单是数组,...

  • Python 操作 HDF5文件

    在Matlab操作HDF5文件中已经详细介绍了HDF5文件已经利用Matlab对其进行操作的方法。这篇文章总结一下...

  • 错误记录

    错误日志存储在 你的workspace名称.metadata.log文件夹下。 tomcat运行maven项目Ca...

  • 2019-03-13 HDF5格式

    HDF5 HDF5文件以分层结构组织,其中包含两个主要结构:组(Group)和数据集(dataset)。 1、HD...

  • hdf5和argparse

    hdf5 今天开始准备数据集,准备采用hdf5来整合不同病人的数据。教程。一般步骤如下: 创建并打开文件: 选择数...

  • Mongo、Redis、Memcached对比及知识总结

    存储原理(持久化) MongoMongo的数据将会保存在底层文件系统,因此存储容量远大于redis和memcach...

网友评论

      本文标题:HDF5存储大于4GB的文件,OverflowError: ca

      本文链接:https://www.haomeiwen.com/subject/wnxpeftx.html