Pytorch:torchvision.datasets

中文文档:https://ptorch.com/docs/8/torch-torchvision

torchvision包括了目前流行的数据集,模型结构和常用的图片转换工具,是PyTorch中专门用来处理图像的库。这个包中有四个大类:

  • torchvision.datasets
  • torchvision.models
  • torchvision.transforms
  • torchvision.utils

所有数据集都是torch.utils.data.Dataset的子类, 即它们具有getitemlen实现方法。它们可以传递给torch.utils.data.DataLoader,工作人员可以使用torch.multiprocessing并行加载多个样本的数据。例如:

imagenet_data = torchvision.datasets.ImageFolder('path/to/imagenet_root/')
data_loader = torch.utils.data.DataLoader(imagenet_data,
                                          batch_size=4,
                                          shuffle=True,
                                          num_workers=args.nThreads)

所有的数据集都有几乎相似的API。他们都有两个共同的参数:transform target_transform 分别转换输入和目标。

1 torchvision.datasets

torchvision.datasets 是用来进行数据加载的,这个包中提前处理好了很多图片数据集。

  • MNIST
  • COCO(用于图像标注和目标检测)(Captioning and Detection)
  • LSUN Classification
  • ImageFolder
  • Imagenet-12
  • CIFAR10 and CIFAR100
  • STL10
  • SVHN
  • PhotoTour

1.1 MNIST

下载MNIST数据集,代码如下:

import torchvision

# 下载训练集
train_data = torchvision.datasets.MNIST(
    root='path', 
    train=True, 
    transform=None, 
    target_transform=True, 
    download=False,
)
# 下载测试集
test_data = torchvision.datasets.MNIST(
    root='path', 
    train=False, 
    transform=None, 
    target_transform=True, 
    download=False,
)

参数说明:

  • root:数据集,存在于根目录processed/training.pt 和 processed/test.pt中。
  • train:True = 训练集,False = 测试集
  • download:如果为true,请从Internet下载数据集并将其放在根目录中。如果数据集已经下载,则不会再次下载。
  • transform:接收PIL映像并返回转换版本的函数/变换。例如:transform.RandomCrop
  • target_transform:一个接收目标并转换它的函数/变换。

 

 

 

 

 

### 使用 `torchvision.datasets` 加载图像数据 #### 什么是 `torchvision.datasets.ImageFolder` `torchvision.datasets.ImageFolder` 是 PyTorch 中用于加载分类好的图像数据的一个工具类。它通过递归遍历指定根目录下的所有子文件夹来构建数据集,其中每个子文件夹代表一个类别[^1]。 #### 数据结构要求 为了正确使用 `ImageFolder`,需要确保数据按照特定的层次结构组织。例如,在一个名为 `hotdog` 的数据集中: ``` /path/to/hotdog/ train/ hotdog/ img_001.jpg ... not-hotdog/ img_002.jpg ... val/ hotdog/ img_003.jpg ... not-hotdog/ img_004.jpg ... ``` 在这种情况下: - 子文件夹名(如 `hotdog`, `not-hotdog`)会被视为类别标签。 - 图像会根据其所在子文件夹被赋予相应的标签值[^3]。 #### 示例代码 以下是完整的代码示例,展示如何使用 `torchvision.datasets.ImageFolder` 来加载训练集和测试集的数据: ```python import os from torchvision import datasets, transforms from torch.utils.data import DataLoader # 定义数据预处理操作 transform = transforms.Compose([ transforms.Resize((256, 256)), # 调整大小到固定尺寸 transforms.ToTensor(), # 将图片转换为张量 ]) # 设置路径 data_dir = './data' # 创建训练集和验证集对象 train_dataset = datasets.ImageFolder( root=os.path.join(data_dir, 'train'), transform=transform) test_dataset = datasets.ImageFolder( root=os.path.join(data_dir, 'val'), transform=transform) # 打印类别索引映射关系 print(train_dataset.class_to_idx) # 输出 {'hotdog': 0, 'not-hotdog': 1} # 构建DataLoader以便于批量读取数据 batch_size = 8 train_loader = DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=True) test_loader = DataLoader(dataset=test_dataset, batch_size=batch_size, shuffle=False) ``` 上述代码实现了以下功能: 1. **定义变换**:通过 `transforms.Compose` 对输入图像应用一系列预处理操作,比如调整大小、转为张量等。 2. **创建数据集实例**:分别针对训练集 (`train`) 和验证集 (`val`) 初始化两个 `ImageFolder` 实例,并传入对应的路径以及预处理函数。 3. **打印类别映射表**:可以通过访问属性 `.class_to_idx` 查看各个子文件夹与其对应数值标签之间的映射关系[^2]。 4. **封装成 DataLoaders**:利用 `DataLoader` 提供更高效的批量化迭代方式。 #### 访问单个样本 如果想单独查看某个样本的内容及其标签,则可以这样实现: ```python sample_image, sample_label = train_dataset[0] print(f"Sample image shape: {sample_image.shape}") print(f"Sample label: {sample_label}") # 应该返回的是 int 值表示所属类别编号 ``` 这里需要注意一点就是 `[i][0]` 表达的是第 i 张图本身而 `[i][1]` 则给出相应的目标值即分类号。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值