在 pytorch 中 torch.utils.data 模块包含着一些常用的数据预处理的操作,主要用于数据的读取、切分、准备等。
| 类 | 功能 |
|---|---|
| torch.utils.data.TensorDataset() | 将数据处理为张量 |
| torch.utils.data.ConcatDataset() | 连接多个数据集 |
| torch.utils.data.Subset() | 根据索引获取数据集的子集 |
| torch.utils.data.DataLoader() | 数据加载器 |
| torch.utils.data.random_split() | 随机将数据集拆分为给定长度的非重叠新数据集 |
使用这些类能够对高维数组、图像等各种类型的数据进行预处理,以便深度学习模型的使用。针对文本数据的处理可以使用 torchtext 库进行相关的数据准备操作。
- 高维数组
在很多情况下,我们需要从文本(如 csv 文件)中读取高维数组数据,这类数据的特征是每个样本都有很多个预测变量(特征)和一个被预测变量(目标标签),特征通常是数值变量或者离散变量,被预测变量如果是连续的数值,则对应着回归问题的预测,如果是离散变量,则对应着分类问题。在使用 pytorch 建立模型对数据进行学习时,通常要对数据进行预处理,并将它们转化为网络需要的数据形式。图像数据
torchvision 中的 datasets 模块包含多种常用的分类数据集下载及导入函数,可以很方便地导入数据以及验证所建立的模型效果。datasets 模块所提供的部分常用图像数据集如下。
| 数据集对应的类 | 描述 |
|---|---|
| datasets.MNIST() | 手写字体数据集 |
| datasets.FashionMNIST() | 衣服、鞋子、包等 10 类数据集 |
| datasets.KMNIST() | 一些文字的灰度数据 |
| datasets.CocoCaptions() | 用于图像标注的 MS COCO 数据 |
| datasets.CocoDetection() | 用于检测的 MS COCO 数据 |
| datasets.LSUN() | 10 个场景和 20 个目标的分类数据集 |
| datasets.CIFAR10() | CIFAR10 类数据集 |
| datasets.CIFAR100() | CIFAR100 类数据集 |
| datasets.STL10() | 包含 10 类的分类数据集和大量的未标记数据 |
| datasets.ImageFolder() | 使用 lambd 作为转化器,可自定义图像操作方式 |
torchvision 中的 transforms 模块可以针对每张图像进行预处理操作,在该模块中提供了如下常用图像操作。
| 数据集对应的类 | 描述 |
|---|---|
| transforms.Compose() | 将多个 transform 组合起来使用 |
| transforms.Scale() | 按照指定的图像尺寸对图像进行调整 |
| transforms.CenterCrop() | 将图像进行中心切割,得到给定的大小 |
| transforms.RandomCrop() | 切割中心点的位置随机选取 |
| transforms.RandomHorizontalFlip() | 图像随机水平翻转 |
| transforms.RandomSizedCrop() | 将给定的图像随机切割,然后再变换为给定大小 |
| transforms.Pad() | 将图像所有边用给定的 pad value 填充 |
| transforms.ToTensor() | 把一个取值范围是 [0, 255] 的 PIL 图像或形状为 [H, W, C] 的数组,转换成形状为 [C, H, W],取值范围是 [0, 1.0] 的张量(torch.FloatTensor) |
| transforms.Normalize() | 将给定的图像进行规范化操作 |
| transforms.Lambda(lambd) | 使用 lambd 作为转化器,可自定义图像操作方式 |
- 文本数据
对文本数据进行分类是深度学习任务中常见的应用,但是 pytorch 建立的深度学习网络并不能直接作用于文本数据,需要对文本数据进行相应的预处理。



