news 2026/9/3 10:08:06

线性与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/9/2 23:11:59

线性与Softmax回归的实现与应用:深度学习之softmax回归多分类模型训练

从零开始实现softmax回归 学习目标 通过本课程,学员将了解到如何借助softmax回归训练多分类的模型。具体来说,学员会学习到训练softmax回归循环模型、读取数据、定义模型和损失函数以及如何使用优化算法训练模型、以及大多数常见的深度学习模型都有类似…

作者头像 李华
网站建设 2026/9/2 20:42:17

语音克隆用于语言学习:GPT-SoVITS模仿母语者发音辅助练习

语音克隆用于语言学习:GPT-SoVITS模仿母语者发音辅助练习 在语言学习的漫长旅程中,最令人挫败的往往不是词汇量或语法结构,而是“说得不像”——即便掌握了所有规则,一开口仍是浓浓的“外语腔”。传统教学依赖教师示范和录音材料&…

作者头像 李华
网站建设 2026/9/2 12:53:17

开发者必备:GPT-SoVITS API接口调用与集成方法详解

开发者必备:GPT-SoVITS API接口调用与集成方法详解 在智能语音技术飞速发展的今天,用户不再满足于“能说话”的机器,而是期待“像人一样说话”的声音体验。从虚拟主播到无障碍辅助,从有声读物到数字员工,个性化语音合成…

作者头像 李华
网站建设 2026/9/2 21:37:40

工业自动化中CCS20配置:操作指南

工业自动化中的CCS20配置实战:从入门到高效调试在现代工厂的控制柜里,你可能已经不再只看到一个PLC和几根信号线。取而代之的是复杂的分布式I/O网络、高速PROFINET通信环路,以及与MES系统实时交互的数据流。面对这种复杂度,传统的…

作者头像 李华
网站建设 2026/9/2 21:31:29

15、Drupal主题开发全攻略

Drupal主题开发全攻略 1. 主题调试工具 在图形用户界面中创建可视化表示时,需要一套与编写代码、开发和测试算法不同的调试工具。虽然在主题开发的某些部分仍可使用Visual Studio中的单步调试器,但可能更希望确切了解发送到浏览器的代码类型,以便进行调整,使其符合预期。…

作者头像 李华
网站建设 2026/9/2 22:27:49

如何用GPT-SoVITS生成儿童语音?年龄特征控制技巧分享

如何用 GPT-SoVITS 生成儿童语音?音色与年龄特征的精准控制实战指南 在智能教育、动画配音和儿童陪伴机器人日益普及的今天,一个真实自然、富有“童趣”的 AI 声音,往往能极大提升产品的亲和力与用户体验。然而,大多数现成的文本转…

作者头像 李华