首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PyTorch DataLoader可以从空数据集开始吗?

PyTorch DataLoader可以从空数据集开始吗?
EN

Stack Overflow用户
提问于 2021-12-15 19:04:48
回答 1查看 825关注 0票数 1

我有一个数据集,它位于一个deque缓冲区中,我想用一个DataLoader从它加载随机批。缓冲区开始为空。在从缓冲区中取样之前,数据将添加到缓冲区中。

代码语言:javascript
运行
复制
self.buffer = deque([], maxlen=capacity)
self.batch_size = batch_size
self.loader = DataLoader(self.buffer, batch_size=batch_size, shuffle=True, drop_last=True)

但是,这会导致以下错误:

代码语言:javascript
运行
复制
  File "env/lib/python3.8/site-packages/torch_geometric/loader/dataloader.py", line 78, in __init__
    super().__init__(dataset, batch_size, shuffle,
  File "env/lib/python3.8/site-packages/torch/utils/data/dataloader.py", line 268, in __init__
    sampler = RandomSampler(dataset, generator=generator)
  File "env/lib/python3.8/site-packages/torch/utils/data/sampler.py", line 102, in __init__
    raise ValueError("num_samples should be a positive integer "
ValueError: num_samples should be a positive integer value, but got num_samples=0

结果是,RandomSampler类在初始化时检查num_samples是否为正,这将导致错误。

代码语言:javascript
运行
复制
if not isinstance(self.num_samples, int) or self.num_samples <= 0:
    raise ValueError("num_samples should be a positive integer "
                     "value, but got num_samples={}".format(self.num_samples))

为什么要在这里检查这一点,即使RandomSampler支持在运行时改变大小的数据集?

解决方法之一是使用IterableDataset,但我想使用DataLoader的洗牌功能。

您能想到一种使用DataLoaderdeque的好方法吗?非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-15 19:27:15

这里的问题既不是deque的使用,也不是数据集是动态增长的事实。问题是,您是从大小为零的数据集开始的,这是无效的。

最简单的解决方案是从deque中的任意对象开始,然后动态地删除它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70369070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档