存储和读取大量 3D 数据集的空间有效方式? [关闭]

2023-12-30

我正在尝试根据顺序数据训练神经网络。我的数据集将包含 360 万个训练样本。每个示例都是 30 x 32 ndarray(在 30 天内观察到 32 个特征)。

我的问题是写入和读取这些数据最节省空间的方法是什么?

本质上它会有形状(3.6m, 30, 32) and np.save()看起来很方便,但我无法将整个事情保存在内存中,所以我无法真正使用它来保存它np.save()(或使用加载它np.load())。 CSV 也不起作用,因为我的数据有 3 个维度。

我创建这个东西的计划是批量处理条目并将它们附加到某个文件中,以便我可以在使用时保持空闲内存。

最终,我将使用数据文件作为 PyTorch IterableDataset 的输入,因此它必须是可以一次加载一行的文件(例如.txt文件,但我希望有一些更好的方法来保存这些数据,更符合其表格、3 维性质)。任何想法表示赞赏!


另一种解决方案是使用内存映射张量。这类似于其他解决方案 https://stackoverflow.com/a/64408076/2790047但在我看来更好,因为它抽象了与二进制数据的直接交互,并在更高的抽象级别上运行。

每个张量使用以下方式存储其数据Storage目的。这种机制允许我们使用定义内存映射存储系统FloatStorage.from_file https://pytorch.org/docs/master/storage.html#torch.FloatStorage.from_file。使用内存映射张量可以让我们将数据集写入磁盘并读取它,就好像它是形状为普通张量 (3600000, 32, 30) 一样,而无需直接将该内存存储在 RAM 中。

例如,我们可以使用类似以下内容将数据集写入磁盘

import torch

filename = 'data.bin'
num_samples = 3600000
rows, cols = 32, 30

# shared=True allows us to save the tensor to disk as we perform in place modifications to it
samples = torch.FloatTensor(torch.FloatStorage.from_file(filename, shared=True, size=num_samples * rows * cols)).reshape(num_samples, rows, cols)

for idx in tqdm(range(num_samples)):
    # placeholder random samples, insert your actual samples here
    # every in-place assignment to samples is automatically reflected on the disk
    samples[idx] = torch.randn(rows, cols)

这样做的好处是与内置兼容TensorDataset https://pytorch.org/docs/stable/data.html#torch.utils.data.TensorDataset

from torch.utils.data import TensorDataset, DataLoader

filename = 'data.bin'
num_samples = 3600000
rows, cols = 32, 30

# shared=False prevents changes to samples from affecting the data on disk
samples = torch.FloatTensor(torch.FloatStorage.from_file(filename, shared=False, size=num_samples * rows * cols)).reshape(num_samples, rows, cols)

dataset = TensorDataset(samples)
loader = DataLoader(dataset, batch_size=256, num_workers=0)

for batch in tqdm(loader):
    # batch is a (256, 32, 30) tensor
    pass
100%|██████████| 14063/14063 [00:11<00:00, 1216.80it/s]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

存储和读取大量 3D 数据集的空间有效方式? [关闭] 的相关文章

随机推荐

  • 如何使用scanf限制输入长度

    在此程序中 我采用了大小为 3 4 的维字符数组 只要我每行输入 3 个字符 它就可以正常工作 例如 如果我输入abc abd abd我得到相同的输出 但如果我在第一行 第二行或第三行输入更多字母 则会出现错误 我应该如何检查二维中的空字符
  • 如何防止NFC标签克隆?

    我正在使用 NFC 标签制作一个应用程序 并且必须防止 NFC 标签被克隆 我见过许多其他 NFC 标签 当尝试克隆时 会显示弹出消息 克隆受到限制 标签由密钥保护 我希望我的 NFC 标签具有相同的安全性 这取决于您使用的标签类型以及您想
  • NSOpenPanel runModal 崩溃?

    我有一个基于此论坛上找到的代码的例程 FSRef useOpenFileToGetFSRef NSString fileName requiredFileType NSString requiredFileType FSRef fileFS
  • 轴标签与表达式的 R 对齐

    我想绘制一个变量名称及其符号 由于某些变量的名称很长 因此我尝试将换行符与轴标签混合使用 这会导致对齐中发生有趣的事情 par mar c 1 12 1 1 plot y 1 6 1 6 yaxt n ylim c 1 6 ylab axi
  • 从面板中删除关键侦听器

    是否可以清除我放在我的监听器JPanel 当我调用一个方法时 我放了一个KeyListener在面板上 但是当我退出此方法时 我想清除该侦听器 这是我的方法 private void stopBall final Graphics2D g2
  • VScode 抱怨 Java 项目没有显式编码集

    直到最近我一直使用 vscode 没有任何问题 现在没有错误出现 一些变量永远不会改变颜色 我不断收到错误消息 项目 没有明确的编码集 我不知道我需要做什么来修复它 就在几分钟前 我也遇到了同样的问题 这是我修复它的方法 单击齿轮图标 单击
  • 更新 cabal-install,但版本没有改变

    目前我正在使用 cabal install 1 16 0 我尝试更新 cabal install 因为有人告诉我有更新版本的 ghc 7 6 1 可用 除了这条消息之外 安装结果非常成功 警告 无法在 Users MyName Librar
  • 对 flatList 中的项目进行排序

    在我的 React Native 应用程序中 我显示了我的办公室提供的服务以及这些服务在平面列表中的位置 我还在同一个公寓列表中显示了从该人当前地址开始的服务里程 我希望这些服务按里程排序 下面是我的屏幕数据 以下地点提供服务 123 Te
  • 将 ftable(列联表)转换为 R 中的数据帧

    我正在生成一个ftable 通过在xtabs命令的结果上运行ftable 并且我得到以下内容 Var1 Var2 date group 2007 01 01 q1 1 9 q2 2 8
  • @jsonview of jackson 不使用 jax-rs

    我写了以下代码 class A public static class Public Entity class public class B JsonView A Public class int a int b public class
  • 如何强制关闭串口连接?

    我有通过 USB 串行通信连接到 PC 的设备 我正在执行以下步骤 启动设备 开机 设备将在我的 PC 中检测为 COMx 名称 开始我的申请 基于COM PID VID 我连接到设备 进行沟通 到目前为止我没有遇到任何问题 当我关闭设备时
  • 接口的扩展方法的优先级是否低于不太具体的扩展方法?

    我有以下扩展类 public static class MatcherExtensions public static ExecMatcher
  • 收益率返回与返回 IEnumerable

    我注意到阅读时有一些好奇的事情IDataReader在我无法理解的 using 语句中 虽然我确信答案很简单 为什么在里面时using SqlDataReader rd 如果我直接执行yield return阅读器在阅读期间保持打开状态 但
  • BinaryFormatter 和反序列化复杂对象

    无法反序列化以下对象图 当在 BinaryFormmater 上调用反序列化方法时 会发生该异常 System Runtime Serialization SerializationException The constructor to
  • 如何从本机应用程序的 azure Active Directory 获取客户端密钥以使用 One Drive 业务 API?

    我正在开发一个 Outlook 插件 我想在其中使用 One Drive API 我轻松获得了使用 API 进行 One Drive 个人帐户的客户端 ID 和客户端密钥 但是 当我在 Azure Active Directory 中注册
  • PHP 比较日期时间值

    在我的 PHP 应用程序中 我尝试比较日期时间值 如下所示 if datetime from db lt date Y m d H i s then do something 两个值的格式相同 我不明白的是为什么它只比较日期而忽略时间 日期
  • Rails 3.1 中可以使用 << 运算符插入多个对象吗?

    我可以写以下内容吗 raw data categories each do category obj categories lt lt category end 如下所示 obj categories lt lt raw data cate
  • OpenCV项目点的逆向

    我有一个面向棋盘的相机 我知道这些点的世界 3D 位置以及相机图像上相应投影点的 2D 位置 所有世界点都属于同一平面 我使用solvePnP Matx33d camMat Matx41d distCoeffs Matx31d rvec M
  • 在 R 中使用 tapply、ave 函数计算 ff 向量

    我一直在尝试使用tapply ave ddply按变量组 年龄 性别 创建统计数据 我无法成功使用上述 R 命令 library ff df lt as ffdf data frame a c 1 1 1 3 1 5 b c 10 1 c
  • 存储和读取大量 3D 数据集的空间有效方式? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在尝试根据顺序数据训练神经网络 我的数据集将包含 360 万个训练样本 每个示例都是 30 x 32 ndarray 在 30 天内观察