【问题标题】:Faster pytorch dataset file更快的 pytorch 数据集文件
【发布时间】:2019-08-05 14:31:05
【问题描述】:

我有以下问题,我打开了许多 3D 卷文件以提取一堆 numpy 数组。 我想随机获取这些数组,即在最坏的情况下,如果所有这些数组都在单独的文件中,我会打开与我想要获取的 numpy 数组一样多的 3D 卷。 这里的 IO 不是很好,我打开一个大文件只是为了从中获取一个小的 numpy 数组。 知道如何存储所有这些数组以使 IO 更好吗? 我无法预先读取所有数组并将它们全部保存在一个文件中,因为那样该文件将太大而无法打开 RAM。

我查找了 LMDB,但它似乎都是关于 Caffe 的。 知道如何实现这一目标吗?

【问题讨论】:

    标签: python machine-learning dataset pytorch lmdb


    【解决方案1】:

    我遍历了我的数据集,创建了一个 hdf5 文件并将元素存储在 hdf5 中。事实证明,当打开 hdf5 时,它不会将所有数据加载到 ram 中,而是加载标头。 然后使用标头来获取请求的数据,这就是我解决问题的方法。

    参考: http://www.machinelearninguru.com/deep_learning/data_preparation/hdf5/hdf5.html

    【讨论】:

      【解决方案2】:

      一个简单的解决方案可以是预处理您的数据集并分别保存原始 3D 体积的多个较小的裁剪。这样你就可以牺牲一些磁盘空间来获得更高效的 IO。

      请注意,您可以在此处对作物大小进行权衡:保存比您输入所需更大的作物允许您在运行中仍然进行随机作物扩增。如果您在预处理步骤中保存重叠裁剪,那么您可以确保仍然可以生成原始数据集的所有可能的随机裁剪。

      或者,您可以尝试使用自定义数据加载器来保留几批的完整卷。请注意,这可能会在批次之间产生一些相关性。由于许多机器学习算法依赖于 i.i.d 样本(例如随机梯度下降),因此相关批次很容易导致一些严重的混乱。

      【讨论】:

        猜你喜欢
        • 2019-02-27
        • 1970-01-01
        • 2021-05-09
        • 1970-01-01
        • 2017-12-05
        • 2020-06-21
        • 2018-05-06
        • 2022-07-18
        • 2020-09-28
        相关资源
        最近更新 更多