1.pytorch提供torchvision包及哪些数据集

2.介绍常用数据集

3.下载方式介绍

一、pytorch提供torchvision包及哪些数据集

1.torchvision包构成

计算机视觉是深度学习中最重要的一类应用,为了方便研究者使用,PyTorch 团队专门开发了一个视觉工具包torchvision,这个包独立于 PyTorch,需通过 pip instal torchvision 安装。
在pycharm和Anaconda里都可以安装 torchvision包, torchvision包由流行的数据集、模型体系结构和通用的计算机视觉图像转换组成。简单地说就是常用数据集+常见模型+常见图像增强方法

代码形式

%%torchvision.datasets
数据集
%%torchvision.models
模型
&&torchvision.transforms
数据预处理

2.torchvision.datssets包含的数据集:

pytorch包 国内源 pytorch常用包_pytorch包 国内源


3.transforms

在计算机视觉中处理的数据集有很大一部分是图片类型的,而在 PyTorch 中实际进行计算的是 Tensor 数据类型的变量,所以我们首先需要解决的是数据类型转换的问题,如果获取的数据是格式或者大小不一的图片,则还需要进行归一化和大小缩放等操作,庆幸的是,这些方法在 torch.transforms 中都能找到。在 torch.transforms 中有大量的数据变换类,其中有很大一部分可以用于实现数据增强(DataArgumentation)。若在我们需要解决的问题上能够参与到模型训练中的图片数据非常有限,则这时就要通过对有限的图片数据进行各种变换,来生成新的训练集了,这些变换可以是缩小或者放大图片的大小、对图片进行水平或者垂直翻转等,都是数据增强的方法。
不过在手写数字识别的问题上可以不使用数据增强的方法,因为可用于模型训练的数据已经足够了。对数据进行载入及有相应变化的代码如下:

transform = transforms.Compose(
        [transforms.ToTensor(),
         transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])
%%在以上代码中,在 torchvision.transforms.Compose 中只使用了一个**类型的转换**变换 transforms.ToTensor 和一个**数据标准化变换**transforms.Normalize。

补充:

我们可以将以上代码中的 torchvision.transforms.Compose 类看作一种容器,它能够同时对多种数据变换进行组合。传入的参数是一个列表,列表中的元素就是对载入的数据进行的各种变换操作。这里使用的标准化变换也叫作标准差变换法,这种方法需要使用原始数据的均值(Mean)和标准差(StandardDeviation)来进行数据的标准化,在经过标准化变换之后,数据全部符合均值为0、标准差为1的标准正态分布。

torchvision.transforms 中常用的数据变换操作

torchvision.transforms.Resize:用于对载入的图片数据按我们需求的大小进行缩放。传递给这个类的参数可以是一个整型数据,也可以是一个类似于(h, w)的序列,其中,h 代表高度,w 代表宽度,但是如果使用的是一个整型数据,那么表示缩放的宽度和高度都是这个整型数据的值。
torchvision.transforms.Scale:用于对载入的图片数据按我们需求的大小进行缩放,用法和
torchvision.transforms.Resize类似。
torchvision.transforms.CenterCrop:用于对载入的图片以图片中心为参考点,按我们需要的大小进行裁剪。传递给这个类的参数可以是一个整型数据,也可以是一个类似于(h,w)的序列。* torchvision.transforms.RandomCrop:用于对载入的图片按我们需要的大小进行随机裁剪。传递给这个类的参数可以是一个整型数据,也可以是一个类似于(h,w)的序列。
torchvision.transforms.RandomHorizontalFlip:用于对载入的图片按随机概率进行水平翻转。我们可以通过传递给这个类的参数自定义随机概率,如果没有定义,则使用默认的概率值 0.5。
torchvision.transforms.RandomVerticalFlip:用于对载入的图片按随机概率进行垂直翻转。我们可以通过传递给这个类的参数自定义随机概率,如果没有定义,则使用默认的概率值 0.5。
torchvision.transforms.ToTensor:用于对载入的图片数据进行类型转换,将之前构成 PIL 图片的数据转换成 Tensor 数据类型的变量,让 PyTorch 能够对其进行计算和处理。
torchvision.transforms.ToPILImage:用于将 Tensor 变量的数据转换成 PIL 图片数据,主要是为了方便图片内容的显示。

4.数据预览和加载

在数据下载完成并且载入后,我们还需要对数据进行装载。我们可以将数据的载入理解为对图片的处理,在处理完成后,我们就需要将这些图片打包好送给我们的模型进行训练了,而装载就是这个打包
的过程。在装载时通过 batch_size 的值来确认每个包的大小,通过 shuffle 的值来确认是否在装载的过程中打乱图片的顺序。装载图片的代码如下:

train_loader = torch.utils.data.DataLoader(train_set, batch_size=36,
                                               shuffle=True, num_workers=0)
                                               
val_loader = torch.utils.data.DataLoader(val_set, batch_size=5000,
                                             shuffle=False, num_workers=0)            
对数据的装载使用的是 torch.utils.data.DataLoader 类,类中的

%%dataset 参数用于指定我们载入的数据集名称;
%%batch_size 参数设置了每个包中的图片数据个数,代码中的值是 64,所以在每个包中会包含64张图片;
%%shuffle 参数设置为 True,在装载的过程会将数据随机打乱顺序并进行打包;

5.torchvision.models

import torchvision.models as models
resnet18 = models.resnet18()
alexnet = models.alexnet()
vgg16 = models.vgg16()
squeezenet = models.squeezenet1_0()
densenet = models.densenet161()
inception = models.inception_v3()
googlenet = models.googlenet()
shufflenet = models.shufflenet_v2_x1_0()
mobilenet = models.mobilenet_v2()
resnext50_32x4d = models.resnext50_32x4d()
wide_resnet50_2 = models.wide_resnet50_2()
mnasnet = models.mnasnet1_0()

这样构建的模型的权重值是随机的,只有结构是保存的。想要获取预训练的模型,则需要设置参数pretrained:

import torchvision.models as models
resnet18 = models.resnet18(pretrained=True)
alexnet = models.alexnet(pretrained=True)
squeezenet = models.squeezenet1_0(pretrained=True)
vgg16 = models.vgg16(pretrained=True)
densenet = models.densenet161(pretrained=True)
inception = models.inception_v3(pretrained=True)
googlenet = models.googlenet(pretrained=True)
shufflenet = models.shufflenet_v2_x1_0(pretrained=True)
mobilenet = models.mobilenet_v2(pretrained=True)
resnext50_32x4d = models.resnext50_32x4d(pretrained=True)
wide_resnet50_2 = models.wide_resnet50_2(pretrained=True)
mnasnet = models.mnasnet1_0(pretrained=True)

预训练模型中torchvision提供了很多种

二、简单介绍几个常用

三、下载方式介绍

用MNIST手写数字数据集作为例子,先看这个的API:

pytorch包 国内源 pytorch常用包_python_02


包含5个参数

root:就是你想要保存MNIST数据集的位置,如果download是Flase的话,则会从目标位置读取数据集;

download:True的话就会自动从网上下载这个数据集,到root的位置;

train:True的话,数据集下载的是训练数据集;False的话则下载测试数据集(真方便,都不用自己划分了)

transform:这个是对图像进行处理的transform,比方说旋转平移缩放,输入的是PIL格式的图像(不是tensor矩阵);

target_transform:这个是对图像标签进行处理的函数(这个我没用过不太确定,也许是做标签平滑那种的处理?)

train_set = torchvision.datasets.MNIST(root='./data', train=True,
                                             download=True, transform=transform)
test_set = torchvision.datasets.MNIST(root='./data', train=False,
                                           download=True, transform=transform)              
 
%%root 用于指定数据集在下载之后的存放路径,这里存放在根目录下的 data 文件夹中;注意,要提前定义这些变换操作;train 用于指定在数据集下载完成后需要载入哪部分数据,
%%如果设置为 True,则说明载入的是该数据集的训练集部分;如果设置为 False,则说明载入的是该数据集的测试集部分;
%%transform 用于指定导入数据集时需要对数据进行哪种变换操作;