如何在 MATLAB 中创建和保存大型数据集?

Posted

技术标签:

【中文标题】如何在 MATLAB 中创建和保存大型数据集?【英文标题】:How to create and save a large dataset in MATLAB? 【发布时间】:2020-12-11 18:04:53 【问题描述】:

我有一个 200 x 200 x 200 x 3 的张量尺寸。我想在 MATLAB 中生成一个包含 7000 个这些张量的数据集,以保存在一个大小为 .mat 的文件(或其他可以在 Python 中读取的扩展名)中7000 x 200 x 200 x 200 x 3。如何在循环中这样做而不将这些变量存储在内存中但直接将它们保存在文件中?

【问题讨论】:

稍后你想如何加载张量?您是否需要同时加载多个?为什么不只使用名称为 'tensor0001'.mat'tensor0002.mat' 等的文件,每个张量一个? @LuisMendo 我想将其用作训练数据集。每个张量都应该是 CNN 的输入。我从来没有遇到过每个条目都是一个文件的数据集 【参考方案1】:

您可以根据您的变量生成一个名称,并将其存储在同一个 .mat 文件中。 您需要添加“-append”标志,以免文件被覆盖。 您可能还必须在循环结束时删除临时变量。

类似:

for i = 1:10
  tensor = newTensor();
  eval(['tensor_' num2str(i)] '=tensor;');
  save(['path/tensor_.mat'], ['tensor_' num2str(i)], '-append');
  eval(['clearvars tensor_' num2str(i) ';']);
end

有人在他们的网站上问了非常相似的问题 https://uk.mathworks.com/matlabcentral/answers/236354-saving-mat-files-in-a-for-loop

【讨论】:

分离每个张量是否可行,以便在 Python 中读取它们并将它们用于训练深度学习架构? 这取决于您输入的类型/形状。如果输入层接受大小为 200x200x200x3 的输入,您可以使用小批量张量对其进行训练。如果您的意思是,您想进一步打破它(如拆分每个通道),您可能需要在从 Python 读取时重新组合它们。例如,您独立读取三个通道,重建张量,并将其输入网络。但这完全取决于您如何定义算法、数据和输入层。 这正是我想要做的。输入是 200 x 200 x 200 x 3。 你可以先s. (['tensor_' num2str(i)]) = ... 然后save(...,'-struct',s)。这将与您的代码执行相同的操作,但没有 eval @BNQ:难在哪里?您是否收到错误消息、文件中的错误数据或其他内容?结构创建语句为s. (['tensor_' num2str(i)]) = tensor;。保存语句为save('tensor.mat', '-struct', s, '-append');。确保 s 在你的函数中不存在,或者选择一个以前没有使用过的变量名。您可以使用s=[] 对其进行初始化,以确保它没有不同的值。

以上是关于如何在 MATLAB 中创建和保存大型数据集?的主要内容,如果未能解决你的问题,请参考以下文章

在HDF5文件中创建和访问数据集

在一个 HTML 文件中创建和保存的 localStorage 数据可以在另一个 HTML 文件中使用吗?

如何在 HDF5DotNet 中创建 2D H5Array

如何使用 maven 程序集插件在 tar 中创建和包含 zip 文件

如何在 Django ModelAdmin 中创建和保存动态字段?

如何在 Ember Data 1.13.7 中创建和保存新模型并更新 UI