从 python 中的文件中读取张量对象的最快方法

Fastest method of reading tensor objects from files in python

我正在各种数据集上训练 PyTorch 模型。到目前为止的数据集都是图像,所以我可以在需要时使用快速的 cv2 或 PIL 即时读取它们。

现在我看到了一个形状为 [400, 400, 8] 的张量对象的数据集。过去我曾尝试使用 PyTorch 和 NumPy 的内置张量读取操作来加载这些对象,但这些通常比读取图像慢得多。

对象当前存储在 h5py 压缩文件中,每个文件大约有 800 个。我的计划是以某种格式单独保存对象,然后即时读取它们,但我不确定以哪种格式保存它们最快。

我想避免将它们全部保存在内存中,因为我认为内存要求太高了。

如果数据数组仍然是“图像”,只是8通道的,你可以将它们拆分成3个图像文件

a = x[:, :, 0:3]
b = x[:, :, 3:6]
c = x[:, :, 5:8]
c[:, :, 0] = 0 # reduces the compressed size

并使用常规图像库(cv2 和 PIL)存储它们。

图像比一般数据压缩(有损'jpeg'更是如此),因此减少了磁盘space和带宽,并且具有文件系统缓存优势。