我刚接触大型数据集,很难将我正在阅读的解释和教程推断为我的问题。
我想要将37019张图像(每个450x600x3)保存到一个numpy数组中,并将其压缩到一个文件中进行训练。是实例化一个37019x450x600x3的0数组并在以后修改它们,还是逐个追加450x600x3数组更好?
现在我正在使用h5py,但它的结果是Killed: 9
import numpy as np
import h5py
imgarray = np.zeros((37019,450, 600, 3))
with h5py.File('deleteme.h5', 'a') as FOB:
FOB.create_dataset("imgarray",data=imgarray,compression="gzip",compression_opts=9)
大约需要5分钟,然后:
Killed: 9
当图像的数量较少时,例如3700而不是37019,这是可行的。3700会产生一个30MB的.h5文件。
这是否意味着我的数组对于h5dy中的一个数据集来说太大了?我是否需要将其保存在更小的块中,单独的数据集或其他东西?你有什么推荐的方法可以方便的访问和修改?
谢谢你的帮助!
发布于 2016-03-29 02:27:04
在您的其他问题中,您发现zip
归档可能有大小限制;它也可能适用于gzip
压缩。或者可能只是花了太长时间。
h5py
文档指出,将dataset
保存为h5py
文件时会动态压缩(并动态解压缩)。我还看到一些关于它与chunking
交互的内容。您可能需要浏览h5py
github存储库或相关的邮件列表。
您是否尝试过其他压缩方法或参数?
如何将数据保存在多个数据集中,每个数据集中的大小都很容易压缩?
发布于 2016-03-30 04:33:23
可能有一种更好的方法可以做到这一点,但我最终只是将我的数据集分成了几个numpy数组,每个数组的大小为1000x450x600x3,gzip可以很好地完成这项工作。它花了25分钟,但都保存到一个400MB大小的.h5文件中。谢谢!
https://stackoverflow.com/questions/36270068
复制相似问题