pytorch数据集与数据预处理
本文最后更新于 2025年2月19日 晚上
一. PyTorch 内置数据集
PyTorch 通过 torchvision.datasets
模块提供了许多常用的数据集,例如:
MNIST
:手写数字图像数据集,用于图像分类任务。CIFAR
:包含 10 个类别、60000 张 32x32 的彩色图像数据集,用于图像分类任务。COCO
:通用物体检测、分割、关键点检测数据集,包含超过 330k 个图像和 2.5M 个目标实例的大规模数据集。ImageNet
:包含超过 1400 万张图像,用于图像分类和物体检测等任务。STL-10
:包含 100k 张 96x96 的彩色图像数据集,用于图像分类任务。Cityscapes
:包含 5000 张精细注释的城市街道场景图像,用于语义分割任务。SQUAD
:用于机器阅读理解任务的数据集。
以上数据集可以通过 torchvision.datasets
模块中的函数进行加载,也可以通过自定义的方式加载其他数据集。
torchvision
: 一个图形库,提供了图片数据处理相关的 API 和数据集接口,包括数据集加载函数和常用的图像变换。torchtext
: 自然语言处理工具包,提供了文本数据处理和建模的工具,包括数据预处理和数据加载的方式。
1 |
|
二. 定义数据集
1. torch.utils.data.Dataset
- 作用:定义数据集的统一接口,需继承并实现关键方法。
- 功能:
__len__(self)
: 返回数据集的总样本数。__getitem__(self, idx)
: 根据索引idx
返回单个样本(数据 + 标签)。
- 适用场景
- 处理自定义格式数据(如非标准文件结构)。
- 需要复杂的数据预处理逻辑(如动态生成数据)。
- 代码示例
1 |
|
2. torch.utils.data.TensorDataset
- 作用:基于张量(Tensor)的数据集类,适合处理数据-标签对。
- 功能:
- 它接受多个张量作为输入(通常是数据和标签),并将它们组合成一个数据集。
- 直接支持批处理和迭代。
- 适用场景
- 处理自定义格式数据(如非标准文件结构)。
- 需要复杂的数据预处理逻辑(如动态生成数据)。
- 代码示例
1 |
|
三. 加载数据集
1. torch.utils.data.DataLoader
- 作用:一个数据加载器,用于封装 Dataset 并提供高效的迭代功能。
- 功能:
- 支持批处理(batch_size):将数据集分成小批量。
- 支持数据打乱(shuffle):在每个 epoch 开始时打乱数据顺序。
- 支持多线程加载(num_workers):加速数据加载过程。
- drop_last:如果数据集中的样本数不能被 batch_size 整除,设置为 True 时,丢弃最后一个不完整的 batch。
- 适用场景
- 在训练模型时,通常会将 Dataset 传递给 DataLoader,以便高效地加载数据。
- 代码示例
1 |
|
2. torchvision.datasets.ImageFolder
- 作用:这是一个专门用于加载图像数据的数据集类,适用于图像分类任务。
- 功能:
- 从文件夹中加载图像数据,每个子文件夹代表一个类别。
- 自动为每个图像分配标签(根据子文件夹名称)。
- 支持数据预处理(通过 transform 参数)。
- 适用场景
- 当你的图像数据按类别存储在文件夹中时,可以直接使用 ImageFolder。
- 代码示例
1 |
|
3. 验证
1 |
|
四. 数据预处理
transforms.Compose()
:将多个变换操作组合在一起。transforms.Resize(size)
:调整图像大小。transforms.ToTensor()
:将图像转换为 PyTorch 张量,值会被归一化到 [0, 1] 范围。transforms.Normalize(mean, std)
:标准化图像数据,通常使用预训练模型时需要进行标准化处理。transforms.CenterCrop(size)
:从图像中心裁剪指定大小的区域。
1 |
|
五. 图像数据增强
transforms.RandomHorizontalFlip(p)
:随机水平翻转图像。transforms.RandomRotation(degrees)
:随机旋转图像。transforms.ColorJitter(brightness, contrast, saturation, hue)
:调整图像的亮度、对比度、饱和度和色调。transforms.RandomCrop(size)
:随机裁剪指定大小的区域。transforms.RandomResizedCrop(size)
:随机裁剪图像并调整到指定大小。
1 |
|
六. 用多个数据源(Multi-source Dataset)
1 |
|
七. 实例–加载MNIST 数据集,并应用转换。
1 |
|
输出结果为:
1 |
|
pytorch数据集与数据预处理
https://jimes.cn/2025/01/26/pytorch数据集以及数据预处理/