news 2026/6/10 13:55:14

线性与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/6/4 21:30:11

项目应用中LED显示屏尺寸大小与清晰度平衡策略

如何科学选择LED显示屏:尺寸、清晰度与成本的平衡艺术你有没有遇到过这样的场景?会议室里新装的大屏,走近一看全是“马赛克”;或者户外广告牌白天看得清,晚上亮得刺眼,路人纷纷侧目。这些看似是产品问题&am…

作者头像 李华
网站建设 2026/5/29 7:15:09

n8n严重漏洞可导致任意代码执行

聚焦源代码安全,网罗国内外最新资讯!编译:代码卫士n8n工作流自动化平台存在一个严重漏洞CVE-2025-68613(CVSS评分9.9)。若被成功利用,可在特定条件下导致任意代码执行。根据npm官方统计,该软件包…

作者头像 李华
网站建设 2026/6/5 14:15:44

如何处理时间序列缺失数据

原文:towardsdatascience.com/how-to-handle-time-series-missing-data-d45e9aaae72c 简介 数据收集中的问题可能导致缺失数据。这个问题可能由于各种原因出现,例如传感器维护或传输故障。 缺失数据通常通过数据插补策略来解决,例如用中心统…

作者头像 李华
网站建设 2026/5/30 13:32:54

python榆林特色旅游纪念品商城网站的设计与实现_8f7p0_pycharm django vue flask

目录 已开发项目效果实现截图开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 已开发项目效果实现截图 同行可拿货,招校园代理 python榆林特色旅游纪念品商城网站的设计与实现_8f7p0_pych…

作者头像 李华
网站建设 2026/6/10 13:29:55

24、Git 合并操作与支持文件使用指南

Git 合并操作与支持文件使用指南 1. Git 交互式变基中的编辑提交 在 Git 的交互式变基中,编辑操作是一个强大的功能。当交互式变基执行到编辑操作并停止时,你可以在本地进行任何所需的更改,比如编辑或添加文件,然后将这些更改添加到暂存区。接着,你可以使用带有 --amen…

作者头像 李华
网站建设 2026/6/9 21:28:53

如何在机器学习项目中处理不平衡数据集

原文:towardsdatascience.com/how-to-handle-imbalanced-datasets-in-machine-learning-projects-a95fa2cd491a 想象一下,你已经训练了一个准确率高达 0.9 的预测模型。像精确度、召回率和 f1 分数这样的评估指标也看起来很有希望。但你的经验和直觉告诉…

作者头像 李华