pytorch数据集地图风格与可迭代风格

Aer*_*rin 14 pytorch

Pytorch 中的地图样式数据集具有__getitem__()__len__(),可迭代样式数据集具有__iter__()协议。如果我们使用地图样式,我们可以访问很棒的数据dataset[idx],但是使用可迭代数据集我们不能。

我的问题是为什么这种区别是必要的?是什么使得数据随机读取如此昂贵甚至不可能?

小智 15

我写了一篇简短的文章,介绍如何使用 PyTorch 数据集,以及地图样式和可迭代样式数据集之间的区别。

\n

本质上,您应该尽可能使用地图样式的数据集。地图样式数据集提前为您提供其大小,更容易洗牌,并且允许轻松并行加载。

\n

这是一个常见的误解,即如果您的数据不适合内存,则必须使用可迭代样式的数据集。那不是真的。您可以实现地图样式的数据集,以便它根据需要检索数据。

\n

在这里查看完整的帖子。

\n


nai*_*rbv 3

完整的数据集很可能不适合内存(可能位于磁盘上,或者只能通过网络访问)。如果您不打算访问任意偏移量,则不必保留信息流。如果您要通过网络请求数据[0]、数据[1]、数据[2],那么您将发送大量请求,从而导致延迟。

当增量读取数据库查询结果中的行时,类似 Iterable (ResultSet) 对象是典型的。还可以想象,数据集本质上可以是信息流,例如日志数据、事务或网络爬虫发现的增量发现的页面。