有效创建HDF5图像数据集以进行具有内存限制的神经网络训练

时间:2019-03-07 16:32:55

标签: python image pytorch hdf5 h5py

我正在使用大型图像数据集来训练CNN。由于无法将所有图像都加载到RAM中,因此我计划将其转储到HDF5文件(带有h5py)中,然后按批处理遍历设置,如

所示

Most efficient way to use a large data set for PyTorch?

我尝试为位于同一组中的每张图片创建自己的数据集,这非常快。但是我不知道要遍历该组中的所有数据集,除非按名称访问该集合。 另一种选择是,根据

,我尝试通过扩展其形状将所有图像迭代地放入一个数据集中

How to append data to one specific dataset in a hdf5 file with h5py

incremental writes to hdf5 with h5py

但这非常慢。有没有更快的方法来创建要迭代的HDF5数据集?

1 个答案:

答案 0 :(得分:0)

我意识到这是一个古老的问题,但是我发现了一个我想分享的非常有用的资源:

https://www.oreilly.com/library/view/python-and-hdf5/9781491944981/ch04.html

基本上,hdf5(启用了块)就像一个小文件系统。它以分散在整个内存中的块的形式存储数据。因此,就像文件系统一样,它受益于局部性。如果块的形状与您尝试访问的数组部分的形状相同,则读/写将很快。如果您要查找的数据分散在多个块中,则访问速度会很慢。

因此,在对图像进行神经网络训练的情况下,您可能必须将图像设为标准尺寸。创建数据集时设置chunks=(1,) + image_shape,甚至更好的设置chunks=(batch_size,) + image_shape,读/写会快很多。