9.图片分类数据集
创始人
2024-03-19 17:24:03
0

1. 图像分类数据集

MNIST数据集 [LeCun et al., 1998] 是图像分类中广泛使用的数据集之一,但作为基准数据集过于简单。 我们将使用类似但更复杂的Fashion-MNIST数据集。

%matplotlib inline
import torch
import torchvision
from torch.utils import data
from torchvision import transforms
from d2l import torch as d2ld2l.use_svg_display()

2. 读取数据集

通过框架中的内置函数将Fashion-MNIST数据集下载并读取到内存中

# 通过ToTensor 实例将图像数据从PIL类型变换成32位浮点数格式
# 并除以255使得所有像素的数值均在0~1之间trans = transforms.ToTensor()  # 把图片转成pytorch的tensor,做一个简单的预处理# 从torchvision.datasets中把FashionMNIST拿到,下载到上一级目录的data下面
# train = True 表示的是:下载的是训练数据集
# transform=trans 表示数据集拿出来之后,要得到的是pytorch的tensor,而不是一堆图片
# download=True 默认从网上下载,如果不方便的话,可以事先下载好存在data文件夹下面
mnist_train = torchvision.datasets.FashionMNIST(root="./data",train = True,transform=trans,download=True)
# 测试数据集,用来验证模型好坏的数据集,不参与训练
mnist_test = torchvision.datasets.FashionMNIST(root="./data",train=False,transform=trans,download=True)len(mnist_train),len(mnist_test)

下载成功会显示:

在这里插入图片描述
读取第一张图片:

# mnist_train[i][0]表示第i个样本的图片信息,mnist_train[i][1]表示第i个样本的标签值
mnist_train[0][0].shape # 第一张图片的形状,是一个黑白图片
# rgb的channel数=1,单通道,长和宽都是28

在这里插入图片描述

Fashion-MNIST中包含的10个类别,分别为t-shirt(T恤)、trouser(裤子)、pullover(套衫)、dress(连衣裙)、coat(外套)、sandal(凉鞋)、shirt(衬衫)、sneaker(运动鞋)、bag(包)和ankle boot(短靴)。 以下函数用于在数字标签索引及其文本名称之间进行转换。

def get_fashion_mnist_labels(labels):'''返回Fashion-MNIST数据集的文本标签'''text_labels = ['t-shirt','trouser','pullover','dress','coat','sandal','shirt', 'sneaker', 'bag', 'ankle boot']return [text_balels[int(i)] for i in labels]

创建一个函数来可视化这些样本:

def show_images(imgs, num_rows, num_cols, titles=None, scale=1.5):  #@save"""绘制图像列表"""# 设置图片大小figsize = (num_cols * scale, num_rows * scale) # tuple类型# _表示忽略不使用的变量,即fig_, axes = d2l.plt.subplots(num_rows, num_cols, figsize=figsize)axes = axes.flatten()for i, (ax, img) in enumerate(zip(axes, imgs)):if torch.is_tensor(img):# 图片张量ax.imshow(img.numpy())else:# PIL图片ax.imshow(img)# 取消横纵坐标上的刻度ax.axes.get_xaxis().set_visible(False)ax.axes.get_yaxis().set_visible(False)if titles:# 设置标题ax.set_title(titles[i])return axes

以下是训练数据集中前几个样本的图像及其相应的标签.

# 通过DataLoader函数从训练数据集中拿到第一个小批量,批量大小为18的数据
X,y = next(iter(data.DataLoader(mnist_train,batch_size=18)))
show_images(X.reshape(18,28,28),2,9,titles=get_fashion_mnist_labels(y))

在这里插入图片描述

3. 读取小批量

batch_size = 256# 每一次读取数据不容易,需要使用多个进程来进行数据的读取,操作以及预读取
def get_dataloader_workers():'''使用4个进程来读取的数据'''return 4train_iter = data.DataLoader(mnist_train,batch_size,shuffle = True,num_workers = get_dataloader_workers())timer = d2l.Timer() # 定义Timer函数来测试速度
for X,y in train_iter:continue
f'{timer.stop():.2f} sec'

运行结果如下,可以看到扫一遍数据要4.25秒:
在这里插入图片描述

有时候会碰到模型训练很快,但是数据读不过来,通常来说,会在训练之前,去看一下数据读取多快。读取数据的时间至少要比训练要快一些

4. 整合所有的组件

把所有的之前的函数放在一个函数里面,使得之后能够重用。

定义load_data_fashion_mnist函数,用于获取和读取Fashion-MNIST数据集。 这个函数返回训练集和验证集的数据迭代器。 此外,这个函数还接受一个可选参数resize,用来将图像大小调整为另一种形状。

def load_data_fashion_mnist(batch_size, resize=None):  #@save"""下载Fashion-MNIST数据集,然后将其加载到内存中"""trans = [transforms.ToTensor()]if resize:trans.insert(0, transforms.Resize(resize))trans = transforms.Compose(trans)mnist_train = torchvision.datasets.FashionMNIST(root="../data", train=True, transform=trans, download=True)mnist_test = torchvision.datasets.FashionMNIST(root="../data", train=False, transform=trans, download=True)return (data.DataLoader(mnist_train, batch_size, shuffle=True,num_workers=get_dataloader_workers()),data.DataLoader(mnist_test, batch_size, shuffle=False,num_workers=get_dataloader_workers()))

下面,我们通过指定resize参数来测试load_data_fashion_mnist函数的图像大小调整功能:

train_iter, test_iter = load_data_fashion_mnist(32, resize=64)
for X, y in train_iter:print(X.shape, X.dtype, y.shape, y.dtype)break

现在已经准备好使用Fashion-MNIST数据集,便于下面的章节调用来评估各种分类算法。

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...