【问题标题】:How to create Datasets Like MNIST in Pytorch?如何在 Pytorch 中创建类似 MNIST 的数据集?
【发布时间】:2018-12-07 07:42:29
【问题描述】:

我查看了 MNIST 数据集的 Pytorch 源代码,但它似乎直接从二进制文件中读取 numpy 数组。 我怎样才能像它一样创建 train_data 和 train_labels?我已经准备好了带标签的图片和txt。

我已经学会了如何读取图像和标签以及如何编写get_item和len,真正让我困惑的是如何制作train_datatrain_labels,即torch.Tensor。我试图将它们排列成 python 列表并转换为 torch.Tensor 但失败了:

for index in range(0,len(self.files)):
  fn, label = self.files[index]
  img = self.loader(fn)
  if self.transform is not None:
    img = self.transform(img)
  train_data.append(img)
self.train_data = torch.tensor(train_data)

ValueError: 只有一个元素张量可以转换为 Python 标量

【问题讨论】:

标签: dataset pytorch


【解决方案1】:

有两条路可以走。首先,手册。 Torchvision.datasets 声明如下:

数据集是 torch.utils.data.Dataset 的子类,即它们实现了 __getitem____len__ 方法。因此,它们都可以传递给 torch.utils.data.DataLoader,它可以使用 torch.multiprocessing 工作线程并行加载多个样本。

所以你可以只实现你自己的类来扫描所有图像和标签,保留它们的路径列表(这样你就不必将它们保存在 RAM 中)并具有给定索引的 __getitem__ 方法i 读取第 i 个文件及其标签并返回它们。这个最小的接口足以与torch.utils.data中的并行dataloader一起工作。

其次,如果您的数据目录可以重新排列为任一结构,您可以使用DatasetFolderImageFolder 预构建加载器。这将为您节省一些编码并自动为来自torchvision.transforms 的数据增强例程提供支持。

【讨论】:

    猜你喜欢
    • 2020-05-22
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    • 2023-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    相关资源
    最近更新 更多