[英]Efficiently Create HDF5 Image Dataset for Neural Network Training with Memory Limitations
我有大的图像数据集来训练 CNN。 由于我无法将所有图像加载到我的 RAM 中,我计划将它们转储到 HDF5 文件中(使用 h5py),然后按照建议批量迭代该集合
我尝试为位于同一组中的每张图片创建自己的数据集,这非常快。 但我无法想出遍历组中的所有数据集,除了通过其名称访问该集。 作为替代方案,我尝试通过扩展其形状将所有图像迭代地放入一个数据集中,根据
如何使用 h5py 将数据附加到 hdf5 文件中的一个特定数据集和
但这很慢。 有没有更快的方法来创建一个 HDF5 数据集来迭代?
我意识到这是一个老问题,但我发现了一个关于这个主题的非常有用的资源,我想分享:
https://www.oreilly.com/library/view/python-and-hdf5/9781491944981/ch04.html
基本上,hdf5(启用了块)就像一个小文件系统。 它将数据存储在分散在整个内存中的块中。 因此,就像文件系统一样,它受益于局部性。 如果块的形状与您尝试访问的数组部分的形状相同,则读取/写入速度会很快。 如果您要查找的数据分散在多个块中,则访问速度会很慢。
因此,在对图像训练 NN 的情况下,您可能必须将图像设为标准尺寸。 在创建数据集时设置chunks=(1,) + image_shape
,或者甚至更好, chunks=(batch_size,) + image_shape
,读/写会快很多。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.