news 2026/3/7 7:57:15

线性与Softmax回归的实现与应用:Fashion-MNIST服装分类数据集与高性能数据迭代器实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
线性与Softmax回归的实现与应用:Fashion-MNIST服装分类数据集与高性能数据迭代器实现

图像分类数据集

学习目标

通过本课程,学员将了解到Fashion-MNIST是一个服装分类数据集。具体来说,学员会学习到Fashion-MNIST是一个服装分类数据集由10个类别的图像组成、数据迭代器是获得更高性能的关键组件、依靠实现良好的数据迭代器、利用高性能计算来避免减慢训练过程等重要概念。

相关知识点

  • Fashion-MNIST数据集

学习内容

1 Fashion-MNIST数据集

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

pip install d2l==1.0.3
%matplotlib inlineimporttorchimporttorchvisionfromtorch.utilsimportdatafromtorchvisionimporttransformsfromd2limporttorchasd2l d2l.use_svg_display()
1.1 读取数据集
!wget https://model-community-picture.obs.cn-north-4.myhuaweicloud.com/ascend-zone/notebook_datasets/d41fb34e144511f0b5c8fa163edcddae/FashionMNIST.zip
!unzip FashionMNIST.zip
# 通过ToTensor实例将图像数据从PIL类型变换成32位浮点数格式,# 并除以255使得所有像素的数值均在0~1之间trans=transforms.ToTensor()mnist_train=torchvision.datasets.FashionMNIST(root="./data",train=True,transform=trans,download=False)mnist_test=torchvision.datasets.FashionMNIST(root="./data",train=False,transform=trans,download=False)

Fashion-MNIST由10个类别的图像组成,每个类别由训练数据集(train dataset)中的6000张图像和测试数据集(test dataset)中的1000张图像组成。因此,训练集和测试集分别包含60000和10000张图像。测试数据集不会用于训练,只用于评估模型性能。

len(mnist_train),len(mnist_test)

每个输入图像的高度和宽度均为28像素。数据集由灰度图像组成,其通道数为1。为了简洁起见,本课程将高度hhh像素、宽度www像素图像的形状记为h×wh \times wh×w或(hhh,www)。

mnist_train[0][0].shape

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

defget_fashion_mnist_labels(labels):#@save"""返回Fashion-MNIST数据集的文本标签"""text_labels=['t-shirt','trouser','pullover','dress','coat','sandal','shirt','sneaker','bag','ankle boot']return[text_labels[int(i)]foriinlabels]

我们现在可以创建一个函数来可视化这些样本。

defshow_images(imgs,num_rows,num_cols,titles=None,scale=1.5):#@save"""绘制图像列表"""figsize=(num_cols*scale,num_rows*scale)_,axes=d2l.plt.subplots(num_rows,num_cols,figsize=figsize)axes=axes.flatten()fori,(ax,img)inenumerate(zip(axes,imgs)):iftorch.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)iftitles:ax.set_title(titles[i])returnaxes

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

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));

1.2 读取小批量

为了使我们在读取训练集和测试集时更容易,我们使用内置的数据迭代器,而不是从零开始创建。
回顾一下,在每次迭代中,数据加载器每次都会读取一小批量数据,大小为batch_size
通过内置数据迭代器,我们可以随机打乱了所有样本,从而无偏见地读取小批量。

batch_size=256defget_dataloader_workers():#@save"""使用4个进程来读取数据"""return4train_iter=data.DataLoader(mnist_train,batch_size,shuffle=True,num_workers=get_dataloader_workers())

我们看一下读取训练数据所需的时间。

timer=d2l.Timer()forX,yintrain_iter:continuef'{timer.stop():.2f}sec'

out:

'3.24 sec'
1.3 整合所有组件

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

defload_data_fashion_mnist(batch_size,resize=None):#@save"""下载Fashion-MNIST数据集,然后将其加载到内存中"""trans=[transforms.ToTensor()]ifresize:trans.insert(0,transforms.Resize(resize))trans=transforms.Compose(trans)mnist_train=torchvision.datasets.FashionMNIST(root="./data",train=True,transform=trans,download=False)mnist_test=torchvision.datasets.FashionMNIST(root="./data",train=False,transform=trans,download=False)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)forX,yintrain_iter:print(X.shape,X.dtype,y.shape,y.dtype)break

Out:

torch.Size([32, 1, 64, 64]) torch.float32 torch.Size([32]) torch.int64
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/3 8:38:16

语音节奏控制技巧:调整GPT-SoVITS输出语速与停顿的方法

语音节奏控制技巧:调整GPT-SoVITS输出语速与停顿的方法 在AI语音助手、有声书朗读和虚拟主播日益普及的今天,用户对合成语音“像不像人”“好不好懂”的要求越来越高。一个再逼真的音色,如果语速飞快、毫无喘息之机,听起来也像是…

作者头像 李华
网站建设 2026/3/4 10:48:34

多系统双系统下cubemx安装教程:初级用户参考方案

多系统开发环境下 STM32CubeMX 的正确打开方式:写给初学者的实战指南 你是不是也遇到过这种情况? 刚在 Windows 上用 CubeMX 配好一个项目,高高兴兴地保存了 .ioc 文件,结果重启进 Ubuntu 后打开却提示“配置异常”&#xff1…

作者头像 李华
网站建设 2026/3/3 11:40:05

GPT-SoVITS支持实时推理吗?延迟与吞吐量实测报告

GPT-SoVITS支持实时推理吗?延迟与吞吐量实测报告 在当前AI语音技术飞速发展的背景下,个性化语音合成正从实验室走向千行百业。无论是虚拟主播用“你的声音”讲故事,还是失语者通过几分钟录音重建自己的声线,背后都离不开少样本语音…

作者头像 李华
网站建设 2026/3/3 21:17:48

语音合成可懂度测试:GPT-SoVITS在噪声环境下的表现评估

语音合成可懂度测试:GPT-SoVITS在噪声环境下的表现评估 在智能语音助手、车载系统和远程教育日益普及的今天,用户不再满足于“能说话”的机器,而是期待一个听得清、辨得准、有温度的声音伙伴。然而,当这些语音系统走出实验室&…

作者头像 李华
网站建设 2026/3/3 15:55:34

Multisim示波器使用实战案例分享

Multisim示波器实战指南:从零开始掌握电路动态调试你有没有遇到过这种情况?辛辛苦苦搭好一个放大电路,仿真一跑,输出却不是预期的正弦波——要么削顶、要么振荡、要么干脆没信号。这时候,光看电压表读数已经无能为力了…

作者头像 李华
网站建设 2026/3/4 11:36:33

16、Drupal主题与测试全解析

Drupal主题与测试全解析 1. Drupal页面渲染流程 当Drupal渲染页面时,会经历一系列复杂但可预测的步骤,将结构转化为HTML。以下是典型页面渲染的详细过程: 1. 内容获取与数组构建 :Drupal的内容管理引擎从数据库获取所有内容,并根据当前条件(如用户权限、是否显示评论…

作者头像 李华