PyTorch - 14 - CNN图像准备代码项目 - 学习提取,转换,加载(Extract, Transform, Load : ETL)

PyTorch - 14 - CNN图像准备代码项目 - 学习提取,转换,加载(Extract, Transform, Load : ETL)

The ETL Process

在这篇文章中,我们将通过准备数据开始。 为了准备我们的数据,我们将遵循被称为ETL流程的内容。

  1. 从数据源提取数据。
  2. 将数据转换为所需的格式。
  3. 将数据加载到合适的结构中。

在这里插入图片描述

ETL过程可以被认为是分形过程,因为它可以应用于各种规模。 该过程可以小规模应用(例如单个程序),也可以大规模应用,直到企业级,那里有处理各个部分的庞大系统。

如果您想了解有关通用数据科学管道的更多信息,请查看数据科学文章,我们将在其中详细介绍。

一旦我们完成了ETL流程,我们就准备开始构建和训练我们的深度学习模型。 PyTorch具有一些内置的包和类,这些类和包使ETL过程非常容易。

PyTorch Imports

我们首先导入所有必需的PyTorch库。

import torch
import torch.nn as nn
import torch.optim as optim
import torch.nn.functional as F

import torchvision
import torchvision.transforms as transforms

下表描述了每个软件包的:

包装 说明
torch 顶级PyTorch软件包和张量库。
torch.nn 一个子包,其中包含用于构建神经网络的模块和可扩展类。
torch.optim 一个子包,其中包含SGD和Adam之类的标准优化操作。
torch.nn.functional 一个功能接口,其中包含用于构建神经网络的典型操作,例如损失函数和卷积。
torchvision 一个软件包,提供对流行的数据集,模型体系结构和计算机视觉图像转换的访问。
torchvision.transforms 一个接口,其中包含用于图像处理的常见转换。

Other Imports

接下来的导入是用于Python数据科学的标准软件包:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

from sklearn.metrics import confusion_matrix
#from plotcm import plot_confusion_matrix

import pdb

torch.set_printoptions(linewidth=120)

请注意,pdb是Python调试器,注释的导入是本地文件,我们将在以后的文章中引入该文件来绘制混淆矩阵,最后一行设置PyTorch打印语句的打印选项。

我们现在准备准备我们的数据。

Preparing Our Data Using PyTorch

准备数据时,我们的最终目标是进行以下操作(ETL):

1.提取–从源获取Fashion-MNIST图像数据。
2. 转换–将我们的数据转换为张量形式。
3. 加载–将我们的数据放入对象以使其易于访问。

为此,PyTorch为我们提供了两个类:

说明
torch.utils.data.Dataset 用于表示数据集的抽象类。
torch.utils.data.DataLoader 包装数据集并提供对基础数据的访问。

抽象类是Python类,它具有必须实现的方法,因此我们可以通过创建扩展Dataset类功能的子类来创建自定义数据集。

为了使用PyTorch创建自定义数据集,我们通过创建实现这些必需方法的子类来扩展Dataset类。完成此操作后,我们的新子类便可以传递给PyTorch DataLoader对象。

我们将使用torchvision软件包内置的fashion-MNIST数据集,因此我们不必在项目中执行此操作。只需知道Fashion-MNIST内置数据集类在后台进行此操作即可。

Dataset类的所有子类都必须覆盖提供数据集大小的__len__和支持从0到len(self)互斥的整数索引的__getitem__

具体来说,有两种方法需要实现。 __len__方法返回数据集的长度,而__getitem__方法从数据集中获取位于数据集中特定索引位置的元素。

PyTorch Torchvision Package

torchvision软件包使我们可以访问以下资源:

  1. 数据集(如MNIST和Fashion-MNIST)
  2. 模型(例如VGG16)
  3. Transforms
  4. Utils

Computer Vision

所有这些资源都与深度学习计算机视觉任务有关。

在这里插入图片描述

当我们在上一篇文章中了解了Fashion-MNIST数据集时,介绍了Fashion数据集的arXiv论文表明,作者希望它成为原始MNIST数据集的替代品。

这样做的想法是使像PyTorch这样的框架可以通过仅更改用于检索数据的URL来添加Fashion-MNIST。

PyTorch就是这种情况。 PyTorch FashionMNIST数据集只是扩展了MNIST数据集并覆盖了网址。

这是PyTorch的torchvision源代码中的类定义:

class FashionMNIST(MNIST):
    """`Fashion-MNIST <https://github.com/zalandoresearch/fashion-mnist>`_ Dataset.

    Args:
        root (string): Root directory of dataset where ``processed/training.pt``
            and  ``processed/test.pt`` exist.
        train (bool, optional): If True, creates dataset from ``training.pt``,
            otherwise from ``test.pt``.
        download (bool, optional): If true, downloads the dataset from the internet and
            puts it in root directory. If dataset is already downloaded, it is not
            downloaded again.
        transform (callable, optional): A function/transform that  takes in an PIL image
            and returns a transformed version. E.g, ``transforms.RandomCrop``
        target_transform (callable, optional): A function/transform that takes in the
            target and transforms it.
    """
    urls = [
        'http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-images-idx3-ubyte.gz',
        'http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-labels-idx1-ubyte.gz',
        'http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-images-idx3-ubyte.gz',
        'http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-labels-idx1-ubyte.gz',
    ]

现在让我们看看如何利用torchvision

PyTorch Dataset Class

要使用torchvision获取FashionMNIST数据集的实例,我们只需创建一个像这样的实例:

train_set = torchvision.datasets.FashionMNIST(
    root='./data'
    ,train=True
    ,download=True
    ,transform=transforms.Compose([
        transforms.ToTensor()
    ])
)

请注意,根参数以前是'./data/FashionMNIST',但是由于torchvision更新而已更改。

我们指定以下参数:

参数 说明
root 数据在磁盘上的位置。
train 如果数据集是训练集
download 是否应下载数据。
transform 应该对数据集元素执行的变换的组合。

由于我们希望将图像转换为张量,因此我们使用了内置的transforms.ToTensor()转换,并且由于该数据集将用于训练,因此我们将其命名为train_set。

当我们第一次运行此代码时,Fashion-MNIST数据集将在本地下载。后续呼叫将在下载数据之前检查数据。因此,我们不必担心重复下载或网络重复通话。

PyTorch DataLoader Class

要为我们的训练集创建一个DataLoader包装器,我们需要这样做:

train_loader = torch.utils.data.DataLoader(train_set
    ,batch_size=1000
    ,shuffle=True
)

我们只是将train_set作为参数传递。 现在,我们可以利用加载程序来完成原本很难手动实现的任务:

  1. batch_size(在我们的示例中为1000)
  2. shuffle (在我们的情况下为真)
  3. num_workers(默认为0,表示将使用主进程)

ETL Summary

ETL的角度来看,我们在创建数据集时已经完成了提取,并使用了Torchvision进行了转换:

  1. 提取–从网络提取原始数据。
  2. 变换-原始图像数据被变换为张量。
  3. 加载-由数据加载器包装(加载到其中)的train_set使我们可以访问基础数据。

现在,我们应该对PyTorch提供的torchvision模块有一个很好的了解,以及如何使用PyTorchtorch.utils.data包中的DatasetsDataLoader来简化ETL任务。

在下一篇文章中,我们将了解如何与数据集和数据加载器一起使用,以访问和查看单个样本以及一批样本。

下一个再见!

猜你喜欢

转载自blog.csdn.net/weixin_48367136/article/details/112492873