当前位置: 首页 > 知识库问答 >
问题:

从多个不同大小的数据集加载PyTorch数据

燕砚文
2023-03-14

我有多个数据集,每个数据集中有不同数量的图像(和不同的图像维度)。在训练循环中,我想从所有数据集中随机加载一批图像,但每个批次只包含单个数据集中的图像。例如,我有数据集A、B、C、D,每个数据集都有图像01。jpg,02。jpg,…n.jpg(其中n取决于数据集),假设批量大小为3。例如,在第一个加载的批次中,我可能会在下一个批次[D/01.jpg,D/05.jpg,D/12.jpg]中获得图像[B/02.jpg,B/06.jpg,B/12.jpg],等等。

到目前为止,我考虑了以下几点:

  1. 为每个数据集使用不同的DataLoader,例如dataloaderA,dataloaderB等,然后在每个训练循环中随机选择一个dataloader并从中获取批次。然而,这将需要一个for循环,对于大量的数据集来说,这将是非常慢的,因为它不能在工作人员之间并行地进行分割。
  2. 使用单个DataLoader将来自所有数据集的所有图像放在一起,但使用自定义collate_fn将仅使用来自同一数据集的图像创建批处理。(我不知道具体该怎么做。)
  3. 我已经看了ConcatDataset类,但是从它的源代码来看,如果我使用它并尝试获得一个新的批次,它中的图像将从我不想要的不同数据集中混合在一起。

最好的方法是什么?谢谢!

共有1个答案

叶举
2023-03-14

您可以使用ConcatDataset,并提供一个batch_samplerDataLoader

concat_dataset = ConcatDataset((dataset1, dataset2))

ConcatDataset。comulative_size将为您提供每个数据集之间的边界:

ds_indices = concat_dataset.cumulative_sizes

现在,您可以使用ds\u索引创建批取样器。请参阅BatchSampler的源代码以获取参考。批量采样器只需返回一个包含N个随机索引的列表,这些索引将尊重ds_索引边界。这将保证批处理将具有来自同一数据集的元素。

 类似资料:
  • 我正在训练一个LSTM,以便将时间序列数据分类为2类(0和1)。我在驱动器上有巨大的数据集,其中0类和1类数据位于不同的文件夹中。我试图通过创建一个Dataset类并将DataLoader包装在它周围来批量使用LSTM。我必须做整形等预处理。这是我的密码 ' `我在运行此代码时遇到此错误 RuntimeError:Traceback(最后一次调用):文件“/usr/local/lib/python

  • PyTorch包含一个名为的包,用于加载和准备数据集。它包括两个基本功能,即和,它们有助于数据集的转换和加载。 数据集 数据集用于从给定数据集读取和转换数据点。实现的基本语法如下所述 - 用于随机播放和批量处理数据。它可用于与多处理工作程序并行加载数据。 示例:加载CSV文件 使用Python包Panda来加载csv文件。原始文件具有以下格式:(图像名称,68个标记 - 每个标记具有,坐标)。

  • 对于在时间序列数据上实现PyTorch数据管道的“最佳实践”,我有点困惑。 我有一个HD5文件,我使用自定义DataLoader读取。似乎我应该返回数据样本作为一个(特征,目标)元组,每个元组的形状是(L,C),其中L是seq_len,C是通道数-即不要在数据加载器中预制批处理,只需返回一个表。 PyTorch模块似乎需要一个批处理暗淡,即。Conv1D期望(N,C,L)。 我的印象是,类将预先处

  • 我想知道如何在Pytorch中创建一个支持多种标签类型的数据加载器。我该怎么做?

  • 本文向大家介绍pytorch 自定义数据集加载方法,包括了pytorch 自定义数据集加载方法的使用技巧和注意事项,需要的朋友参考一下 pytorch 官网给出的例子中都是使用了已经定义好的特殊数据集接口来加载数据,而且其使用的数据都是官方给出的数据。如果我们有自己收集的数据集,如何用来训练网络呢?此时需要我们自己定义好数据处理接口。幸运的是pytroch给出了一个数据集接口类(torch.uti

  • 在本章中,将更多地关注及其各种类型。PyTorch包括以下数据集加载器 - MNIST COCO (字幕和检测) 数据集包括以下两种函数 - - 一种接收图像并返回标准内容的修改版本的函数。这些可以与变换一起组合。 - 获取目标并对其进行转换的函数。例如,接受标题字符串并返回索引张量。 MNIST 以下是MNIST数据集的示例代码 - 参数如下 - - 存在已处理数据的数据集的根目录。 - =训练