对于 PyTorch 消费的可变长度序列数据,什么是合适的数据存储?

数据挖掘 数据集 熊猫 数据 火炬 顺序
2022-03-03 17:09:13

我有大量的序列 - 可能有数十万 - 每个包含 100 到 10,000 个项目,每个项目包含大约 5 个浮点数。

我需要一个可以快速批量提供这些数据以进行 PyTorch 训练的数据存储。我还需要能够快速将新序列写入商店。这就像强化学习的经验回放缓冲区,但我想存储每一次运行。

这些序列每个都应该有一些可查询格式的附加结构化元数据,以便我可以选择序列子集。

最好的解决方案看起来像 HDF5 - 通过 h5py 或 PyTables - 除了我不知道如何使它有效地处理可变序列长度。填充是不合适的,因为长度变化很大,并且将每个序列存储为自己的 HDF5 数据集似乎是一个糟糕的主意,因为 HDF5 似乎没有针对大量小型数据集进行优化。

我关注的想法包括 Pandas 多索引、HDF5 区域引用以及从头开始构建自定义元数据索引系统。我真的不知道从这里去哪里。

存储紧凑性很重要——我需要合理有效地利用我的存储空间。

1个回答

我目前选择的是将所有样本打包到单个 HDF5 表缓冲区中,并保留一个单独的表,其中包含跟踪每个单独序列的缓冲区位置和长度的元数据。这可行,但我不会将此答案标记为正确,因为我对此不满意。这种存储方法非常不适合编辑,如果错误导致表不同步,它很容易丢失。