我不熟悉使用HDF5文件,我正在尝试读取形状为(20670, 224, 224, 3)
的文件。每当我试图将hdf5的结果存储到一个列表或另一个数据结构中时,都会花费很长时间,导致我中止执行,或者导致我的计算机崩溃。我需要能够读取3组hdf5文件,使用它们的数据,操作它,使用它来训练CNN模型并做出预测
对于阅读和使用这些大型HDF5文件的任何帮助,我们将不胜感激
目前,我是这样读取hdf5文件的:
db = h5py.File(os.getcwd() + "/Results/Training_Dataset.hdf5")
training_db = list(db['data'])
崩溃可能意味着内存不足。正如Vignesh Pillay所建议的,我会尝试将数据分块,一次处理一小块数据。如果使用pandas方法read_hdf,则可以使用迭代器和chunksize参数来控制分块:
注:这要求hdf采用表格格式
您的问题是在内存不足时出现的。因此,虚拟数据集在处理像您这样的大型数据集时非常方便。虚拟数据集允许通过接口层将多个真实数据集映射到单个可切片数据集。你可以在这里阅读更多关于他们的信息https://docs.h5py.org/en/stable/vds.html
我建议您一次从一个文件开始。首先,为现有数据创建一个虚拟数据集文件,如
这将创建现有培训数据的虚拟数据集。现在,如果您想操作数据,您应该像这样以
r+
模式打开文件我想建议的另一件事是,确保切片时的索引是
int
数据类型,否则会出现错误我的答案更新了2020-08-03,以反映您添加到问题中的代码。 正如@Tober所指出的,您的内存正在耗尽。读取形状数据集(206702242243)将成为3.1G实体的列表。如果读取3个图像集,则需要更多的RAM。 我假设这是图像数据(可能是20670个形状的图像(2242243))? 如果是这样,您可以使用
h5py
和tables
(Pytables)读取片中的数据。 这将以NumPy数组的形式返回数据,您可以直接使用它(无需操作到不同的数据结构中)基本流程如下所示:
您还可以通过将第一个索引设置为一个范围(例如
icnt:icnt+100
),然后适当地处理循环来读取多个图像相关问题 更多 >
编程相关推荐