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

PyTorch数据集/数据加载程序批处理

芮叶秋
2023-03-14

对于在时间序列数据上实现PyTorch数据管道的“最佳实践”,我有点困惑。

我有一个HD5文件,我使用自定义DataLoader读取。似乎我应该返回数据样本作为一个(特征,目标)元组,每个元组的形状是(L,C),其中L是seq_len,C是通道数-即不要在数据加载器中预制批处理,只需返回一个表。

PyTorch模块似乎需要一个批处理暗淡,即。Conv1D期望(N,C,L)。

我的印象是,DataLoader类将预先处理批处理维度,但事实并非如此,我正在处理数据(N,L)。

dataset = HD5Dataset(args.dataset)

dataloader = DataLoader(dataset,
                        batch_size=N,
                        shuffle=True,
                        pin_memory=is_cuda,
                        num_workers=num_workers)

for i, (x, y) in enumerate(train_dataloader):
    ...

在上面的代码中,x的形状是(N,C)而不是(1,N,C),这导致下面的代码(来自公共git回购)在第一行失败。

def forward(self, x):
    """expected input shape is (N, L, C)"""
    x = x.transpose(1, 2).contiguous() # input should have dimension (N, C, L)

留档状态自动批处理启用时它总是预先添加一个新的维度作为批处理维度,这让我相信自动批处理被禁用,但我不明白为什么?

共有2个答案

越新霁
2023-03-14

我发现了一些似乎有效的方法,其中一种方法似乎是使用数据加载器的collate\fn,但更简单的方法是使用BatchSampler

dataset = HD5Dataset(args.dataset)
train, test = train_test_split(list(range(len(dataset))), test_size=.1)

train_dataloader = DataLoader(dataset,
                        pin_memory=is_cuda,
                        num_workers=num_workers,
                        sampler=BatchSampler(SequentialSampler(train),batch_size=len(train), drop_last=True)
                        )

test_dataloader = DataLoader(dataset,
                        pin_memory=is_cuda,
                        num_workers=num_workers,
                        sampler=BatchSampler(SequentialSampler(test),batch_size=len(test), drop_last=True)
                        )

for i, (x, y) in enumerate(train_dataloader):
    print (x,y)

这将数据集dim(L,C)转换为单个批次(1,L,C)(不是特别有效)。

公良文彬
2023-03-14

如果您有一个张量对的数据集,其中每个张量对的形状都是C,L,那么:

N, C, L = 5, 3, 10
dataset = [(torch.randn(C,L), torch.ones(1)) for i in range(50)]
dataloader = data_utils.DataLoader(dataset, batch_size=N)

for i, (x,y) in enumerate(dataloader):
    print(x.shape)

将为x生产(50/N)=10批形状(N,C,L)

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

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

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

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

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

  • 我试图在Spark中创建成批的行。为了保持发送到服务的记录数量,我想对项目进行批处理,这样我就可以保持数据发送的速率。对于, 对于给定的我想创建 例如,如果输入有100条记录,那么输出应该像一样,其中每个应该是记录(Person)的列表。 我试过了,但没用。 我想在Hadoop集群上运行此作业。有人能帮我吗?