我正在使用大型图像数据集来训练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数据集?
答案 0 :(得分:0)
我意识到这是一个古老的问题,但是我发现了一个我想分享的非常有用的资源:
https://www.oreilly.com/library/view/python-and-hdf5/9781491944981/ch04.html
基本上,hdf5(启用了块)就像一个小文件系统。它以分散在整个内存中的块的形式存储数据。因此,就像文件系统一样,它受益于局部性。如果块的形状与您尝试访问的数组部分的形状相同,则读/写将很快。如果您要查找的数据分散在多个块中,则访问速度会很慢。
因此,在对图像进行神经网络训练的情况下,您可能必须将图像设为标准尺寸。创建数据集时设置chunks=(1,) + image_shape
,甚至更好的设置chunks=(batch_size,) + image_shape
,读/写会快很多。